[img]http://dl.iteye.com/upload/attachment/248022/97e662e8-0624-34c1-926f-ae52f3e9ce0e.jpg[/img]
:x 先这样吧
jogl , jme, webgl 版代码以后补上
//============================================================================
// Name : opengl.cpp
// Author : 迪子
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#ifdef WIN32
#include <windows.h>
#endif
#include <iostream>
#include <GL/glut.h>
#include <GL/gl.h>
using namespace std;
//当键盘被按下时执行
void handleKeypress(unsigned char key, //键盘被按下的键的键值
int x, int y) { //鼠标坐标
switch (key) {
case 27: //Escape 键
exit(0); //退出程序
}
}
//初始化 3D 渲染
void initRendering() {
//启动深度测试,话说假设在视线前有两物体,如果没启动这个功能,先画A还是先画B产生的结果是不同的;后画的物体会遮挡先被画出的物体。
//会产生的错误结果就是距离您远的物体挡住了距离您近的物体。
//启动这功能就NB了,无论先画哪个物体,opengl都会自动正确计算遮挡关系,当然系统开销会增大。
glEnable(GL_DEPTH_TEST);
}
//当窗口大小改变是执行
void handleResize(int w, int h) {
//告诉 OpenGL 怎样讲坐标转换成像素值;在窗口中定义一个像素矩形,最终的图像将映射到这个矩形中;
//x,y 指定视口的左下角,w,h 是视口矩形的宽度和高度;
//简单的说就是设置下画面大小。
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION); //告诉OPENGL接下来的变换函数将影响投影矩阵,投影变换的目的是定义一个视景体;
//视景体决定了一个物体是如何被映射到屏幕上,以及哪些些物体被裁剪;
//设置摄像机 投影
glLoadIdentity(); //reset摄像机
gluPerspective(45.0, //视角
(double)w / (double)h, //宽,高比
1.0, //The near z 裁剪坐标
200.0); //The far z 裁剪坐标 ;显示距离摄像机 1到200的物体,之外的被剔除,不显示
}
//画场景
void drawScene() {
//清除上次的颜射缓冲合深度缓冲
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); //告诉OPENGL接下来的变换函数将影响模型矩阵
glLoadIdentity(); //Reset 矩阵
glBegin(GL_QUADS); //开始画四方形
//四方形4个顶点
glVertex3f(-0.7f, -1.5f, -5.0f);
glVertex3f(0.7f, -1.5f, -5.0f);
glVertex3f(0.4f, -0.5f, -5.0f);
glVertex3f(-0.4f, -0.5f, -5.0f);
glEnd(); //四方形画完了
glBegin(GL_TRIANGLES); //开始画三角形
//五角形由三个三角形组成
//第一个三角形
glVertex3f(0.5f, 0.5f, -5.0f);
glVertex3f(1.5f, 0.5f, -5.0f);
glVertex3f(0.5f, 1.0f, -5.0f);
//第二个三角形
glVertex3f(0.5f, 1.0f, -5.0f);
glVertex3f(1.5f, 0.5f, -5.0f);
glVertex3f(1.5f, 1.0f, -5.0f);
//第三个三角形
glVertex3f(0.5f, 1.0f, -5.0f);
glVertex3f(1.5f, 1.0f, -5.0f);
glVertex3f(1.0f, 1.5f, -5.0f);
//三角行
glVertex3f(-0.5f, 0.5f, -5.0f);
glVertex3f(-1.0f, 1.5f, -5.0f);
glVertex3f(-1.5f, 0.5f, -5.0f);
glEnd(); //结束三角形绘制
glutSwapBuffers(); //把场景往屏幕上画
}
int main(int argc, char** argv) {
//初始化 GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(400, 400); //设置窗体大小
//创建窗体
glutCreateWindow("测试");
initRendering(); //初始化3D渲染
glutDisplayFunc(drawScene); //画呀画
glutKeyboardFunc(handleKeypress);//按呀按
glutReshapeFunc(handleResize);//变呀变
glutMainLoop();
return 0;
}
:x 先这样吧
jogl , jme, webgl 版代码以后补上