用OpenGl绘制可旋转且可变色的地球仪
来源:互联网 发布:美特斯邦威淘宝 编辑:程序博客网 时间:2024/04/28 17:32
#include "stdafx.h"
#include <windows.h>
#include <gl/GL.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <cstdlib>
#include <GL/GLAUX.h>
#pragma comment(lib, "glaux.lib")
GLuint mytexture = 0;
GLUquadricObj* qobj;
const GLfloat lightPosition[] = { 10.0, 10.0, 10.0, 0.0 };
const GLfloat whiteLight[] = { 0.8, 0.8, 0.8, 1.0 };
GLfloat matSpecular[] = { 0.3, 0.3, 0.3, 1.0 };
GLfloat matShininess[] = { 20.0 };
GLfloat matEmission[] = { 0.3, 0.3, 0.3, 1.0 };
GLfloat spin = 0;
void drawfloor();
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();;
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
gluLookAt(0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH);
glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular);
glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
glMaterialfv(GL_FRONT, GL_EMISSION, matEmission);
gluQuadricTexture(qobj, GL_TRUE);//纹理函数
glRotatef(spin, 0.0, 0.0, 1.0);
gluSphere(qobj, 0.75f, 60, 60);
glPopMatrix();
glFlush();
glutSwapBuffers();
//glutSolidSphere(3.0, 16, 16);
//glFlush();
}
void init()
{
glClearColor(0.3, 0.3, 0.3, 1.0);
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, whiteLight);
glEnable(GL_TEXTURE_2D);
auto pimage = auxDIBImageLoad(TEXT("earth1.bmp"));
int weight = pimage->sizeX;
int height = pimage->sizeY;
//获得一个纹理对象
glGenTextures(1, &mytexture);
//将其绑定为2D纹理
glBindTexture(GL_TEXTURE_2D, mytexture);
//设置缩放器
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//为纹理指定图像数据
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, weight, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pimage->data);
//生成一个球
qobj = gluNewQuadric();
}
void myIdle()
{
spin += 0.1;
display();
}
void reshape(int w, int h)
{
glViewport(0.0, 0.0, (GLsizei)w, (GLsizei)h);
}
void mouseFunc(int button, int state, int x, int y)
{
if (state == GLUT_DOWN){
switch (button)
{
case GLUT_LEFT_BUTTON:
matEmission[0] += 1.0;
if (matEmission[0]>1.0)
matEmission[0] -= 1.1;
break;
case GLUT_MIDDLE_BUTTON:
matEmission[1] += 1.0;
if (matEmission[1]>1.0)
matEmission[1] -= 1.1;
break;
case GLUT_RIGHT_BUTTON:
matEmission[2] += 1.0;
if (matEmission[2]>1.0)
matEmission[2] -= 1.1;
break;
}
glutPostRedisplay();
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(450, 450);
glutInitWindowPosition(150, 150);
glutCreateWindow("rotate sphere");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(myIdle);
glutMouseFunc(mouseFunc);
init();
glutMainLoop();
return EXIT_SUCCESS;
}
#include <windows.h>
#include <gl/GL.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <cstdlib>
#include <GL/GLAUX.h>
#pragma comment(lib, "glaux.lib")
GLuint mytexture = 0;
GLUquadricObj* qobj;
const GLfloat lightPosition[] = { 10.0, 10.0, 10.0, 0.0 };
const GLfloat whiteLight[] = { 0.8, 0.8, 0.8, 1.0 };
GLfloat matSpecular[] = { 0.3, 0.3, 0.3, 1.0 };
GLfloat matShininess[] = { 20.0 };
GLfloat matEmission[] = { 0.3, 0.3, 0.3, 1.0 };
GLfloat spin = 0;
void drawfloor();
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();;
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
gluLookAt(0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH);
glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular);
glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
glMaterialfv(GL_FRONT, GL_EMISSION, matEmission);
gluQuadricTexture(qobj, GL_TRUE);//纹理函数
glRotatef(spin, 0.0, 0.0, 1.0);
gluSphere(qobj, 0.75f, 60, 60);
glPopMatrix();
glFlush();
glutSwapBuffers();
//glutSolidSphere(3.0, 16, 16);
//glFlush();
}
void init()
{
glClearColor(0.3, 0.3, 0.3, 1.0);
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, whiteLight);
glEnable(GL_TEXTURE_2D);
auto pimage = auxDIBImageLoad(TEXT("earth1.bmp"));
int weight = pimage->sizeX;
int height = pimage->sizeY;
//获得一个纹理对象
glGenTextures(1, &mytexture);
//将其绑定为2D纹理
glBindTexture(GL_TEXTURE_2D, mytexture);
//设置缩放器
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//为纹理指定图像数据
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, weight, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pimage->data);
//生成一个球
qobj = gluNewQuadric();
}
void myIdle()
{
spin += 0.1;
display();
}
void reshape(int w, int h)
{
glViewport(0.0, 0.0, (GLsizei)w, (GLsizei)h);
}
void mouseFunc(int button, int state, int x, int y)
{
if (state == GLUT_DOWN){
switch (button)
{
case GLUT_LEFT_BUTTON:
matEmission[0] += 1.0;
if (matEmission[0]>1.0)
matEmission[0] -= 1.1;
break;
case GLUT_MIDDLE_BUTTON:
matEmission[1] += 1.0;
if (matEmission[1]>1.0)
matEmission[1] -= 1.1;
break;
case GLUT_RIGHT_BUTTON:
matEmission[2] += 1.0;
if (matEmission[2]>1.0)
matEmission[2] -= 1.1;
break;
}
glutPostRedisplay();
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(450, 450);
glutInitWindowPosition(150, 150);
glutCreateWindow("rotate sphere");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(myIdle);
glutMouseFunc(mouseFunc);
init();
glutMainLoop();
return EXIT_SUCCESS;
}
0 0
- 用OpenGl绘制可旋转且可变色的地球仪
- C#OpenGL(SharpGL)绘制可旋转长方体
- OpenGL——点的绘制(使用OpenGL来绘制可旋转坐标系的螺旋线)
- 使用GDI+ 绘制可旋转的PNG
- opengles绘制可旋转的六角星
- opengles绘制可旋转的球体
- 现代OpenGL+Qt学习笔记之六:绘制可旋转、带光照效果的三维物体
- VS2010-MFC:用OpenGL在对话框中的PictureControl(图片控件)中绘制三维模型,可旋转、平移、缩放,可用于三维模型的预览
- 设置一段文字中某些特定的文字可点击,且文字颜色变色
- ExtGrid行项动态变色且选中行可复制
- 用OpenGL绘制旋转的机器人手臂
- 用OpenGL实现折线和矩形的橡皮筋绘制技术(可完全脱离鼠标)
- 使用CSS3创建一个旋转可变色按钮
- 使用CSS3创建一个旋转可变色按钮
- Directx 3D编程实例:绘制可变速旋转的三角形
- openges绘制可旋转的球体-增加光照效果之散射光
- DirectX学习笔记(三):利用线框模式绘制可旋转的正方体
- 可耗竭且不可回收的资源
- Mysql-聚簇索排序慢案例分析
- Research Proposal for PhD Studies
- 回测框架pybacktest简介(二)
- 3. Longest Substring Without Repeating Characters
- 一周总结
- 用OpenGl绘制可旋转且可变色的地球仪
- POJ1988 Cube Stacking(并查集)
- eclipse创建maven项目
- 路由器DRCOM教程
- excel导入数据库
- js中常见的一些兼容性问题,面试必备
- Linux命令备忘实例——排序和基本统计命令
- python自己动手从零开始搭建FTP服务器2 FTP初步框架
- 项目环境的搭建