gpt4 book ai didi

c++ - 为什么我在 OpenGL/GLFW C++ 中的 3d 形状缺少面孔

转载 作者:太空狗 更新时间:2023-10-29 20:04:38 26 4
gpt4 key购买 nike

所以当我制作一个 3d 三角形时,它只是错过了面,如下所示(四边形)我尝试的任何形状都错过了面,你可以直接看到,(请注意,这是我第一次同时使用 OpenGL 和 GLFW)

形状代码来自一个教程,因为我尝试了很多形状代码来查看是否是问题所在,但似乎不是。

enter image description here enter image description here enter image description here

#include <glfw3.h>
#include <stdio.h>
#include <iostream>

using namespace std;

/* Begin Void prototyping */
void error_callback(int error, const char* description);
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);

int main(void)
{
GLFWwindow* window;

/* Initializes error call-backs */
glfwSetErrorCallback(error_callback);

/* Initialize the library */
if (!glfwInit())
return -1;

/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); // fullscreen glfwGetPrimaryMonitor() (first NULL)
if (!window)
{
glfwTerminate();
return -1;
}

/* Makes OpenGL context current */
glfwMakeContextCurrent(window);

/* Make the window's context current */
glfwMakeContextCurrent(window);

/* Receives input events */
glfwSetKeyCallback(window, key_callback);

/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
float ratio;
int width, height;

glfwGetFramebufferSize(window, &width, &height);
ratio = width / (float) height;

glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f);
glMatrixMode(GL_MODELVIEW);

glLoadIdentity();
glRotatef((float) glfwGetTime() * 50.f, 0.f, 0.f, 1.f);


glBegin(GL_TRIANGLES); // Start Drawing A Triangle
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Front)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f(-1.0f,-1.0f, 1.0f); // Left Of Triangle (Front)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f( 1.0f,-1.0f, 1.0f); // Right Of Triangle (Front)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Right)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f( 1.0f,-1.0f, 1.0f); // Left Of Triangle (Right)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f( 1.0f,-1.0f, -1.0f); // Right Of Triangle (Right)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Back)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f( 1.0f,-1.0f, -1.0f); // Left Of Triangle (Back)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f,-1.0f, -1.0f); // Right Of Triangle (Back)
glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Left)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f,-1.0f,-1.0f); // Left Of Triangle (Left)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f(-1.0f,-1.0f, 1.0f); // Right Of Triangle (Left)
glEnd(); // Done Drawing The Pyramid


/* Swap front and back buffers */
glfwSwapBuffers(window);

/* Poll for and process events */
glfwPollEvents();
}

glfwDestroyWindow(window);

glfwTerminate();
return 0;
}

/*
Calls back the program if a GLFW function fail and logs it
*/
void error_callback(int error, const char* description)
{
fputs(description, stderr);
}

/* Gives keys events */
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
switch(key)
{
case GLFW_KEY_ESCAPE:
glfwSetWindowShouldClose(window, GL_TRUE);
break;
case GLFW_KEY_W:
cout << "W works!!!" << endl;
break;
case GLFW_KEY_A:
cout << "A works!!!" << endl;
break;
case GLFW_KEY_S:
cout << "S works!!!" << endl;
break;
case GLFW_KEY_D:
cout << "D works!!!" << endl;
break;
}
}

我已经尝试修复它几个小时了,我只是不知道现在该怎么做

我在 GLFW 和 C++ 中使用 OpenGL 3+

最佳答案

您需要启用深度测试:

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);

此外,除了颜色缓冲区之外,一定要清除深度缓冲区:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

关于c++ - 为什么我在 OpenGL/GLFW C++ 中的 3d 形状缺少面孔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392242/

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