【发布时间】:2021-05-29 17:17:11
【问题描述】:
在让绿色面出现时遇到问题,最初认为这是一个剔除或缠绕顺序问题,但可以使用新的视角来了解我做错了什么。
目前的问题是绿边,但始终是首先绘制的三角形。
使用的库: Glew & Glfw3
#include <iostream>
#define GLEW_STATIC
#include "GL/glew.h"
#include "GLFW/glfw3.h"
const char* WINDOW_TITLE = "Practice";
const GLint WINDOW_WIDTH = 600;
const GLint WINDOW_HEIGHT = 600;
static void error_callback(int error, const char* description)
{
fprintf(stderr, "Error: %s\n", description);
}
int main()
{
GLFWwindow* window;
if (!glfwInit()) {
std::cout << "GLFW initialisation failed." << std::endl;
return -1;
}
glfwSetErrorCallback(error_callback);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE, NULL, NULL);
if (!window)
{
std::cout << "GLFW failed to create window." << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;
GLenum err = glewInit();
if (err != GLEW_OK)
{
/* Problem: glewInit failed, something is seriously wrong */
std::cout << "GLEW initialisation failed: " << glewGetErrorString(err) << std::endl;
return -1;
}
std::cout << "Status: Using GLEW " << glewGetString(GLEW_VERSION) << std::endl;
/* Choose a colour to clear the screen (RGBA range 0-1) */
glClearColor(0.4f, 0.5f, 0.6f, 1.0f);
glEnable(GL_CULL_FACE | GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glCullFace(GL_BACK);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glRotatef(.5f, 1.f, 1.f, 1.f);
float r = 0.5f;
glBegin(GL_TRIANGLES);
1,0,0 正面(绿色)- 脸不出现
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(r, r, -r);
glVertex3f(r, -r, r);
glVertex3f(-r, -r, -r);
0,1,0 朝向(红色)
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(r, r, -r);
glVertex3f(-r, -r, -r);
glVertex3f(-r, r, r);
0,0,1 朝向(蓝色)
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(-r, r, r);
glVertex3f(-r, -r, -r);
glVertex3f(r, -r, r);
1,1,1 朝向(白色)
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(r, r, -r);
glVertex3f(-r, r, r);
glVertex3f(r, -r, r);
glEnd();
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
【问题讨论】:
标签: c++ opengl opengl-compat