C++ openGL在不同的显示模式下绘制圆、三角形和正方形
我正在使用Xcode编写openGL。我正在做的是画一个圆,一个三角形和一个正方形 然而,我发现我的圆圈只能在屏幕上显示C++ openGL在不同的显示模式下绘制圆、三角形和正方形,c++,xcode,opengl,opengl-es,glut,C++,Xcode,Opengl,Opengl Es,Glut,我正在使用Xcode编写openGL。我正在做的是画一个圆,一个三角形和一个正方形 然而,我发现我的圆圈只能在屏幕上显示 glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE) 三角形和正方形只能在glutInitDisplayMode(GLUT_3_2_CORE_PROFILE | GLUT_RGBA | GLUT_SINGLE)上显示 如何使它们一起显示 以下是我全部代码的一部分: #include "Angel.h" //includes gl.h, g
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;
}
#包括“angle.h”//包括gl.h、glut.h和其他内容。。。
无效m_glewInitAndVersion(无效)//预实现声明(可以在头文件中执行)
作废关闭(作废);
//网格0
胶合缓冲液[3];
GLuint-VAO[3];
胶合色;
GLuint程序;
常数int NumVertices=4;
//以原点为中心的单位立方体顶点,边与轴对齐
向量2点[4]={
vec2(0.25,0.25),
vec2(0.75,0.25),
vec2(0.75,0.75),
向量2(0.25,0.75)
};
vec2点2[3]={
vec2(-1,-1),
vec2(0,-1),
vec2(0,-0.7)};
//RGBA颜色
vec4蓝色_不透明=vec4(0.0,0.0,1.0,1.0);
vec4红色_不透明=vec4(1.0,0.0,0.0,1.0);
//----------------------------------------------------------------------------
//OpenGL初始化
无效的
init()
{
glClearColor(1.0,1.0,1.0,1.0);
//GL3F(1.0,0.0,0.0);
//glMatrixMode(GL_投影);
//glLoadIdentity();
//gluOrtho2D(-3.5,3.5,-3.5,3.5);
//创建并初始化缓冲区对象
glGenBuffers(2,buffer);
glBindBuffer(GL_数组_BUFFER,BUFFER[0]);
glBufferData(GLU数组缓冲区、大小(点)、点、GLU静态图);
//加载着色器并使用生成的着色器程序
program=InitShader(“vshader00_v150.glsl”、“fshader00_v150.glsl”);
glUseProgram(程序);
//设置顶点数组
GLuint vPosition=GlGetAttriblLocation(程序,“vPosition”);
//设置VAO
Glgenvertexarray(2,VAO);
glBindVertexArray(VAO[0]);
glBindBuffer(GL_数组_BUFFER,BUFFER[0]);
GlenableVertexAttributeArray(vPosition);
glvertexattributepointer(vPosition,2,GL_FLOAT,GL_FALSE,0,BUFFER_OFFSET(0));
color_loc=glGetUniformLocation(程序,“颜色”);
//三角
//glBindVertexArray(VAO[1]);
//glBindBuffer(GL_数组_BUFFER,BUFFER[1]);
//glBufferData(GL_数组_缓冲区、sizeof(点S2)、点S2、GL_静态图);
//glUseProgram(程序);
//GlenableVertexAttributeArray(vPosition);
//glvertexattributepointer(vPosition,2,GL_FLOAT,GL_FALSE,0,BUFFER_OFFSET(0));
}
//----------------------------------------------------------------------------
无效的
显示(无效)
{
glClear(GLU颜色缓冲位);
//常数浮点PI=3.14159;
//glBegin(GLU三角形风扇);
//所有三角形从该点开始呈扇形展开
//glVertex2f(0.0,0.0);
//对于(int i=0;i您的圆圈代码不适用于GLUT\u 3\u 2\u CORE\u配置文件,因为在OpenGL 3中删除了glBegin
、glColor3f
、glVertex2f
和glEnd
,所以OpenGL 3.2(或更高版本)没有它们
我不确定为什么你的三角形和正方形代码在没有GLUG3G2O2CIEEX配置文件的情况下不起作用,但是考虑到VAOs是在OpenGL 3中添加的,并且当你没有指定GLUTY3L22CIEEXPrPrm时,你会在3之前得到一个版本。
选择一个版本并坚持使用。“这是我全部代码的一部分”-画三角形、圆和正方形的代码在哪里?这是最重要的部分。它们都在我的init和display函数中。圆和三角形显然不工作,因为它们的代码被注释掉了。是的,我注释掉它们是为了让代码运行。因为圆不能与其他两个一起运行。Wow、 非常感谢!我对OpenGL真的很陌生。OpenGL 3中有没有我可以画圆的方法?我发现大多数教程都使用我使用的方法。@AllenYang是的,你可以创建一个缓冲区,把坐标放在缓冲区中,然后从缓冲区中画出来……就像你已经对正方形和三角形做的那样。嗨,你能详细解释一下吗l?@AllenYang No.搜索OpenGL教程。