OpenGL代码不会显示任何内容
OpenGL code won't show anything
所以,我正在学习OpenGL并遵循教程。唯一不同的是,我把代码放在不同的文件中,使它更有条理。
问题是,当我试图运行它不会显示任何东西,甚至背景颜色(我设置glClearColor(1.0, 1.0, 1.0, 1.0)不会改变。
运行在codeBlocks下,Linux Mint Rebecca.
main.cpp:
#include <iostream>
using namespace std;
#include <GL/glew.h>
#include <GL/freeglut.h>
//Comment/uncomment to change objects
//#define OBJ1 1 /*/*/
//#define OBJ2 1 /*/*/
//#define OBJ3 1 /*/*/
//Keep it clean /*/*/
#include "general.h" /*/*/
#include "shaderManip.h" /*/*/
#include "shape.h" /*/*/
/*---------------------------------*/
// Comodity
#define BUFFER_OFFSET(i) ((char *)NULL + (i))
void renderScene(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0, 1.0, 1.0, 1.0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glutSwapBuffers();
}
int main(int argc, char** argv){
// Initialize GLUT
glutInit(&argc, argv);
// Setup memory buffer for display
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA);
// Create window
glutInitWindowSize(700, 700);
glutCreateWindow("Main View");
// Window manip stuff
glutReshapeFunc(changeViewport);
glutDisplayFunc(renderScene);
// Magic
glewInit();
// Picking Shaders
const char* vertexShaderSource = readFile("vertexShader.glsl");
const char* fragmentShaderSource = readFile("fragmentShader.glsl");
GLuint vertShaderID = makeVertexShader(vertexShaderSource);
GLuint fragShaderID = makeFragmentShader(fragmentShaderSource);
shaderProgramID = makeShaderProgram(vertShaderID, fragShaderID);
// Unlimited Buffer Works
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, (dimEachVertex + dimEachColor)*numVertices*sizeof(GLfloat), NULL, GL_STATIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, dimEachVertex*numVertices*sizeof(GLfloat), vertices);
glBufferSubData(GL_ARRAY_BUFFER, dimEachVertex*numVertices*sizeof(GLfloat), numColors*dimEachColor*sizeof(GLfloat), colors);
positionID = glGetAttribLocation(shaderProgramID, "s_vPosition");
colorID = glGetAttribLocation(shaderProgramID, "s_vColor");
glVertexAttribPointer(positionID, dimEachVertex, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(colorID, dimEachColor, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(numVertices*dimEachVertex*sizeof(GLfloat)));
glUseProgram(shaderProgramID);
glEnableVertexAttribArray(positionID);
glEnableVertexAttribArray(colorID);
// Main loop
glutSpecialFunc(specialKeyboard);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
general.h:
#ifndef GENERAL_H
#define GENERAL_H
/*
Utilities library.
Just for organization's sake on the main file.
*/
#include <GL/glew.h>
#include <GL/freeglut.h>
#include <iostream>
using namespace std;
//Define as shader program
extern GLuint shaderProgramID;
//Vertex Array Object
extern GLuint vao;
//Vertex Buffer Object
extern GLuint vbo;
//Get s_vPosition and s_vColor from shader
extern GLuint positionID, colorID;
void changeViewport(int w, int h);
void keyboard(unsigned char key, int x, int y);
void specialKeyboard(int key, int x, int y);
#endif // GENERAL_H
general.cpp:
#include "general.h"
//Define as shader program
GLuint shaderProgramID;
//Vertex Array Object
GLuint vao = 0;
//Vertex Buffer Object
GLuint vbo;
//Get s_vPosition and s_vColor from shader
GLuint positionID, colorID;
void changeViewport(int w, int h){
glViewport(0, 0, w, h);
}
void keyboard(unsigned char key, int x, int y){
if(key == 27) //Terminate
exit(0);
}
void specialKeyboard(int key, int x, int y){
if(key == GLUT_KEY_RIGHT){ //Arrow Right
cout << "Key_RIGHTn";
}
if(key == GLUT_KEY_LEFT){ //Arrow Left
cout << "Key_LEFTn";
}
if(key == GLUT_KEY_UP){ //Arrow Up
cout << "Key_UPn";
}
if(key == GLUT_KEY_DOWN){ //Arrow Down
cout << "Key_DOWNn";
}
if(key == GLUT_KEY_PAGE_UP){ //Page Up
cout << "Key_PG_UPn";
}
if(key == GLUT_KEY_PAGE_DOWN){ //Page Down
cout << "Key_PG_DOWNn";
}
}
shape.h
#ifndef SHAPE
#define SHAPE
#include <GL/glew.h>
#include <GL/freeglut.h>
#define triangle_Shape 1
//#define square_Shape 1
#ifdef triangle_Shape
extern int dimEachVertex;
extern int dimEachColor;
extern int numVertices;
extern int numColors;
extern GLfloat vertices[];
extern GLfloat colors[];
#endif // triangle_Shape
#endif // SHAPE
shape.cpp
#include "shape.h"
#define triangle_Shape 1
//#define cube_Shape 1
#ifdef triangle_Shape
int dimEachVertex = 3;
int dimEachColor = 4;
int numVertices = 3;
int numColors = 3;
GLfloat vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
GLfloat colors[] = {
1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f
};
#endif // triangle_Shape
"shaderManip.h"answers"。cpp"文件只是从教程中复制的,所以我没有费心附加。
我非常感谢你提供的任何帮助。
我的着色器是错误的。我一定是在复制教程时输入了错误的东西。所示代码的唯一错误是glClearColor函数应该在renderScene函数上的glClear之前,正如上校指出的。
相关文章:
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- QChart在使用QDateTimeAxis时不显示任何系列数据
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 为什么下面的Hello World程序在PowerShell上没有显示任何输出?同一程序在CMD上显示正确的输出
- 是否有任何内置的哈希图函数来处理 c++ 中的值输入?
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- C++ 中是否有任何内置阶乘函数?
- 是否有任何内置函数可以告诉编译器分支是否可预测
- 在不到一分钟的情况下,在一秒钟内显示计时器
- 我需要在C /C#中使用图形.我可以使用任何内置的C /C#库
- 是否有任何内置类可以处理C 中的大整数值
- c ++中是否有任何内置功能可以在计划的时间运行任务
- 是否有任何内置的 UTF 在 c++ 在窗口中
- 在VC++2010中执行任何内置的ARRAY函数
- C++:如何在不使用任何内置函数的情况下将字符串转换为整数
- 如何将文件的路径(或任何文本)显示/附加到编辑框中?(C++ Win32 API)
- 是否有任何内置的CUDA函数允许CUDA内核向主机代码报告错误?
- 我如何在常数时间(O(1))内获得字母表(1-26)中字符的数值/位置,而不使用任何内置方法或函数
- C++中的任何内置哈希方法
- c++库中的任何内置夹子方法