2017-01-27 22 views
1

私はOpenGLに書き込むためにXcodeを使用しています。私がしていることは、円、三角形、四角形を描くことです。OpenGL描画円三角形と正方形が異なる表示モードで

しかし、私は私のサークルだけ

glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);

に三角形を表示することができ、角だけで、私は彼らが一緒に表示させることができますどのようにglutInitDisplayMode(GLUT_3_2_CORE_PROFILE|GLUT_RGBA | GLUT_SINGLE);

に表示できることがわかりましたか?ここで

は私の全体のコードの一部です:

#include "Angel.h" //includes gl.h, glut.h and other stuff... 
void m_glewInitAndVersion(void); //pre-implementation declaration (could do in header file) 
void close(void); 

//Mesh 0 
GLuint buffer[3]; 
GLuint VAO[3]; 
GLuint color_loc; 
GLuint program; 
const int NumVertices = 4; 

// Vertices of a unit cube centered at origin, sides aligned with axes 
vec2 points[4] = { 
vec2(0.25, 0.25), 
vec2(0.75, 0.25), 
vec2(0.75, 0.75), 
vec2(0.25, 0.75) 
}; 

vec2 points2[3]={ 
vec2(-1,-1), 
vec2(0,-1), 
vec2(0,-0.7)}; 


// RGBA colors 
vec4 blue_opaque = vec4(0.0, 0.0, 1.0, 1.0); 
vec4 red_opaque = vec4(1.0, 0.0, 0.0, 1.0); 


//---------------------------------------------------------------------------- 

// OpenGL initialization 
void 
init() 
{ 

glClearColor(1.0, 1.0, 1.0, 1.0); 

// glColor3f(1.0, 0.0, 0.0); 
// glMatrixMode(GL_PROJECTION); 
// glLoadIdentity(); 
// gluOrtho2D(-3.5, 3.5, -3.5, 3.5); 

// Create and initialize a buffer object 
glGenBuffers(2, buffer); 

glBindBuffer(GL_ARRAY_BUFFER, buffer[0]); 
glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW); 

// Load shaders and use the resulting shader program 
program = InitShader("vshader00_v150.glsl", "fshader00_v150.glsl"); 
glUseProgram(program); 

// set up vertex arrays 
GLuint vPosition = glGetAttribLocation(program, "vPosition"); 

//Set up VAO 
glGenVertexArrays(2,VAO); 
glBindVertexArray(VAO[0]); 
glBindBuffer(GL_ARRAY_BUFFER,buffer[0]); 
glEnableVertexAttribArray(vPosition); 
glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0,  BUFFER_OFFSET(0)); 

color_loc = glGetUniformLocation(program, "color"); 

//triangle 
// glBindVertexArray(VAO[1]); 
// glBindBuffer(GL_ARRAY_BUFFER, buffer[1]); 
// glBufferData(GL_ARRAY_BUFFER, sizeof(points2), points2, GL_STATIC_DRAW); 

// glUseProgram(program); 
// glEnableVertexAttribArray(vPosition); 
// glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); 






} 

//---------------------------------------------------------------------------- 

void 
display(void) 
{ 
glClear(GL_COLOR_BUFFER_BIT); 

// const float PI=3.14159; 
// glBegin(GL_TRIANGLE_FAN); 
// All triangles fan out starting with this point 
// glVertex2f (0.0,0.0); 
// for (int i = 0; i <=361; i++) 
// { 
//  glColor3f(float(rand())/float(RAND_MAX), 
//     float(rand())/float(RAND_MAX), 
//     float(rand())/float(RAND_MAX)); 
//  glVertex2f(2.0*cos(i*PI/180), 2.0*sin(i*PI/180)); 
// } 
// glEnd(); 

glBindVertexArray(VAO[0]); 
glDrawArrays(GL_TRIANGLE_FAN, 0, NumVertices); 
glUseProgram(program); 
glUniform4fv(color_loc, 1, blue_opaque); 


// glBindVertexArray(VAO[1]); 

// glDrawArrays(GL_TRIANGLE_FAN, 0, 3); 
// glUseProgram(program); 
// glUniform4fv(color_loc, 1, red_opaque); 



glFlush(); 
} 

int main(int argc, char **argv) 
{ 
glutInit(&argc, argv); 
#ifdef __APPLE__ 
glutInitDisplayMode(GLUT_3_2_CORE_PROFILE|GLUT_RGBA | GLUT_SINGLE); 
#else 
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); 
#endif 
glutInitWindowSize(500, 500); 

glutCreateWindow("CS 432 Hello World"); 
m_glewInitAndVersion(); 


init(); 

glutDisplayFunc(display); 
glutKeyboardFunc(keyboard); 
glutWMCloseFunc(close); 

glutMainLoop(); 
return 0; 
} 
+0

"私のコード全体の一部です" - 三角形、円、四角形を描画するコードはどこですか?それが最も重要な部分です。 – immibis

+0

これらはすべて私の初期化と表示機能にあります –

+0

円と三角形は明らかに機能しません。なぜなら、そのためのコードはコメントアウトされているからです。 – immibis

答えて

2

glBeginglColor3fglVertex2fglEndがそのように3.2のOpenGL(またはそれ以降)、OpenGLの3で削除されたため、あなたのサークルのコードがGLUT_3_2_CORE_PROFILEでは動作しませんdoesnのそれらを持っていない。

私はあなたの三角形と四角形のコードがGLUT_3_2_CORE_PROFILEせずに動作しますが、VAOsはOpenGLの3に追加されたことを考慮していない正確な理由はわからない、とあなたはGLUT_3_2_CORE_PROFILEを指定しないとき、あなたは3

前のバージョンを取得

バージョンを選択して貼り付けます。

+0

うわー、ありがとう!私はOpenGLにとって本当に新しいです。 –

+0

OpenGL 3で円を描くことができますか?私はチュートリアルのほとんどが私が使用した方法を使用していることがわかりました。 –

+0

@AllenYangはい、あなたはバッファを作成し、バッファに座標を入れて、バッファから描画することができます。あなたがすでに正方形と三角形で行ったように。 – immibis

関連する問題