gpt4 book ai didi

c++ - glpointsize() 缩小一个点失败

转载 作者:行者123 更新时间:2023-12-01 14:47:46 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 opengl 程序,该程序使用 glPointSize() 和变量 pointSize 循环增大和缩小屏幕中心的单个点。打印 pointSize 的值并使用调试器单步执行代码似乎表明 pointSize 在每次迭代中正确更新。当 pointSize 增加时,点的渲染似乎也是正确的,但是当 pointSize 减小时,点仍然以其最大尺寸呈现在屏幕上,并继续呈现这样一来,无论 pointSize 的值增加或减少多少 - 我都不知道为什么。

#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include <iostream>

#define numVAOs 1
GLuint renderingProgram;
GLuint vao[numVAOs];

GLuint createShaderProgram() {
const char *vshaderSource =
"#version 430 \n"
"void main(void) \n"
"{ gl_Position = vec4(0.0, 0.0, 0.0, 1.0); }";

const char *fshaderSource =
"#version 430 \n"
"out vec4 color; \n"
"void main(void) \n"
"{ color = vec4(0.0, 0.0, 1.0, 1.0); }";

GLuint vShader = glCreateShader(GL_VERTEX_SHADER);
GLuint fShader = glCreateShader(GL_FRAGMENT_SHADER);
GLuint vfprogram = glCreateProgram();

glShaderSource(vShader, 1, &vshaderSource, NULL);
glShaderSource(fShader, 1, &fshaderSource, NULL);

glCompileShader(vShader);
glCompileShader(fShader);

glAttachShader(vfprogram, vShader);
glAttachShader(vfprogram, fShader);

glLinkProgram(vfprogram);

return vfprogram;
}

void init() {
renderingProgram = createShaderProgram();
glGenVertexArrays(numVAOs, vao);
glBindVertexArray(vao[0]);
}

GLfloat pointSize = 100.0f;
GLfloat increment = 1.0f;

void display() {
glUseProgram(renderingProgram);

if (pointSize > 200 || pointSize < 2) increment *= -1.0f;
pointSize += increment;

glPointSize(pointSize);
glDrawArrays(GL_POINTS, 0, 1);
}

int main(void) {
if (!glfwInit()) exit(EXIT_FAILURE);

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

GLFWwindow* window = glfwCreateWindow(600, 600, "Test", nullptr, nullptr);

glfwMakeContextCurrent(window);

if (glewInit() != GLEW_OK) exit(EXIT_FAILURE);

glfwSwapInterval(1);

init();

while (!glfwWindowShouldClose(window)) {
display();
glfwSwapBuffers(window);
glfwPollEvents();
}

glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}

最佳答案

您的代码不会使用 glClear 清除屏幕。因此,当点增长时,您可以看到它。当它收缩时,它只是简单地绘制在较大点的“内部”,而您没有注意到它。如果您在点的大小改变时改变点的颜色,您可能会发现这一点。

简单地清除帧开头的颜色缓冲区:

void display() {
// default clear color is black, but you can change it:
//glClearColor(1,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);

glUseProgram(renderingProgram);
...

关于c++ - glpointsize() 缩小一个点失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61946603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com