如何在OpenGL中绘制单个像素
How to draw a single pixel in OpenGL?
有人可以告诉我如何在坐标上绘制一个白色像素,例如(100,200)?
我正在使用Glut,到目前为止,我已经弄清楚了如何打开空白窗口。一旦我弄清楚如何绘制像素,我将使用它来实现Bresenham线图算法。(是的,我知道OpenGL可以绘制线路。我需要自己实施)。
#include <stdio.h>
#include <GL/glut.h>
static int win(0);
int main(int argc, char* argv[]){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
//step 2. Open a window named "GLUT DEMO"
win = glutCreateWindow("GLUT DEMO");
glClearColor(0.0,0.0,0.0,0.0); //set background
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
glutMainLoop();
}
glVertex2i(x,y);
这是它需要工作的上下文:
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(80, 80);
glutInitWindowSize(500,500);
glutCreateWindow("A Simple OpenGL Program");
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluOrtho2D( 0.0, 500.0, 500.0,0.0 );
glBegin(GL_POINTS);
glColor3f(1,1,1);
glVertex2i(100,100);
glEnd();
这可以通过设置剪刀矩形然后清除来轻松完成,然后清除剪刀矩形中的指定区域。例如:
glEnable(GL_SCISSOR_TEST);
glScissor(100, 200, 1, 1);
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
// Remember to disable scissor test, or, perhaps reset the scissor rectangle:
glDisable(GL_SCISSOR_TEST);
使用现代OpenGL您可以将glScissor()
与填充整个屏幕的四边形组合。
着色器可以像:
一样简单// Vertex Shader
#version 330 core
layout (location = 0) in vec3 aPos;
void main()
{
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
// Fragment Shader
#version 330 core
out vec4 FragColor;
uniform vec4 inColor;
void main()
{
FragColor = inColor;
}
使用您的首选方法(GLFW,GLAD,GLEN等)进行OpenGL和Windows初始化后,创建一个Quad(实际上是两个三角形)以覆盖整个屏幕,例如:
float vertices[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
-1.0f, 1.0f, 0.0f
};
然后创建缓冲区,编译着着色器并绑定着着色器程序和VAO。
然后使用:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
您的绘图代码看起来像这样绘制X = 100的绿色像素,Y = 100:
GLint transformLoc = glGetUniformLocation(shaderProgramId, "inColor");
glUniform4f(transformLoc, 0.0f, 1.0f, 0.0f, 1.0f);
glEnable(GL_SCISSOR_TEST);
glScissor(100, 100, 1, 1); // position of pixel
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisable(GL_SCISSOR_TEST);
我写了一个在OpenGL顶部构建的小图形渲染类,其代码可以很好地完成。它的核心函数是PutPixel(),它接收X/Y坐标和颜色以在屏幕上绘制单个像素。随时查看代码:https://github.com/amengol/mingl
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- Eclipse CDT:单个项目中有多个C++文件
- 为什么我们将单个或多维数组的大小声明为常量值?
- C++调用具有 *this 属性的单个帮助程序函数
- 如何在OpenGL中绘制单个像素
- 如何在单个缓冲区上绘制生成艺术目的
- 在单个屏幕上绘制场景的多个视图
- GTKMM::在GTk::绘图区域使用单个Gdk::PixBuf绘制多个图像
- 在OpenGL中绘制单个像素