GLuint loadTexture(Image* image) {
GLuint textureId;
glGenTextures(1, &textureId);//创建一个对象ID
glBindTexture(GL_TEXTURE_2D, textureId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width, image->height, 0, GL_RGB, GL_UNSIGNED_BYTE, image->pixels);
return textureId;
}
void init() {
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
Image* image = loadBMP("f3.bmp");
_textureId = loadTexture(image);
delete image;
}
void changesize(int w,int h) {
float ratio;
if (h == 0) h = 1;
ratio = 1.0 * w / h;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, w, h);
gluPerspective(65, ratio, 1, 200);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0f, 1.75f, 20.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f);
}
void renderScene() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
//创建一个域空间
{
glColor3f(0.0f, 0.0f, 1.0f);
glBegin(GL_QUADS);
glVertex3f(-20.0f, -2.5f, -20.0f);
glVertex3f(20.0f, -2.5f, -20.0f);
glVertex3f(-20.0f, -2.5f, 20.0f);
glVertex3f(20.0f, -2.5f, 20.0f);
glEnd();
}
//设置值光源
{
GLfloat sun_light_position[] = {10.0f,5.0f,5.0f,1.0f};
GLfloat sun_light_ambient[] = {0.0f,0.0f,0.0f,1.0f};
GLfloat sun_light_diffuse[] = {1.0f,1.0f,1.0f,1.0f};
GLfloat sun_light_specular[] = {1.0f,1.0f,1.0f,1.0f};
glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, sun_light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, sun_light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, sun_light_specular);
}
//进行纹理映射
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _textureId);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glNormal3f(0.0f,0.0f,1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f,-2.5f,-2.5);
glTexCoord2f(1.0f, 0.0f); glVertex3f(2.5f,-2.5f,-2.5f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f, 2.5f, -2.5f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(2.5f, 2.5f, -2.5f);
glEnd();
/*glBegin(GL_TRIANGLES);
glNormal3f(0.0f, 0.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-2.5f, -2.5f, -2.5f);
glTexCoord2f(0.5f, 1.0f);
glVertex3f(0.0f, 2.5f, -2.5f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(2.5f, -2.5f, -2.5f);
glEnd();*/
}
glutSwapBuffers();
glFlush();
}
//先创建一个平台
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(200, 200);
glutInitWindowSize(500, 500);
glutCreateWindow("小马鸭");
init();//负责开启各种功能
glutDisplayFunc(&renderScene);
glutReshapeFunc(changesize);
glutIdleFunc(&renderScene);
glutMainLoop();
return 0;
}
为什么用openGL绘制多边形,会出现缺角的情况???
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- wlj1234 2020-11-04 08:19关注
glVertex3f(-20.0f, -2.5f, -20.0f); glVertex3f(20.0f, -2.5f, -20.0f); glVertex3f(-20.0f, -2.5f, 20.0f); glVertex3f(20.0f, -2.5f, 20.0f);
顶点顺序有错误,最后两行交换一下位置
glVertex3f(-20.0f, -2.5f, -20.0f); glVertex3f(20.0f, -2.5f, -20.0f); glVertex3f(20.0f, -2.5f, 20.0f); glVertex3f(-20.0f, -2.5f, 20.0f);
解决 无用评论 打赏 举报
悬赏问题
- ¥15 R语言Rstudio突然无法启动
- ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
- ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
- ¥15 用windows做服务的同志有吗
- ¥60 求一个简单的网页(标签-安全|关键词-上传)
- ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值