enGL屏幕中心的坐标值是X和Y轴上的0.0f点。中心左面的 坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。移入屏幕深处是 负值,移出屏幕则是正值。
glTranslatef(x, y, z)是将当前点沿着X,Y和Z轴移动,当我们绘图的时候,不是相对于 屏幕中间,而是相对于当前点。
glBegin(GL.GL_TRIANGLES)的意思是开始绘制三角形,glEnd()告诉OpenGL三角形已经创 建好了。通常当我们需要画3个顶点时,可以使用GL_TRIANGLES。在绝大多数的显卡上,绘制 三角形是相当快速的。如果要画四个顶点,使用GL_QUADS的话会更方便。但据我所知,绝大 多数的显卡都使用三角形来为对象着色。最后,如果想要画更多的顶点时,可以使用 GL_POLYGON。
glVertex(x,y,z)用来设置顶点,如果绘制三角形,这些顶点需要三个一组,如果绘制四 边形,则是四个为一组。如果我们要为顶点着色,就需要glColor3f(r,g,b)方法,记住,每 次设置以后,这个颜色就是当前颜色,直到再次调用该方法重新设置为止。
聞喘Eclipse RCP序佩彑中殻會蝕窟?鎗???OpenGL序嘱(7)
扮寂:2011-04-13 今円牒牒
恷朔俶勣初府議頁glRotatef(Angle,Xvector,Yvector,Zvector)圭隈?乎圭隈減夭斑斤? 律汎峺協議已傴廬?Angle歌方峺廬強議叔業?廣吭頁検泣方填。
和中頁厘議篇夕窃議畠何旗鷹?厘委3D紙夕議販暦畠何慧欺阻総翌匯倖?殻嶄?旺拝協吶 阻匯倖弓拷圭隈public void drawPyramid(float x, float y, float z, int n)喘栖紙崙眉 曹弑裳專。泌和?
package cn.blogjava.youxia.views;
import org.eclipse.opengl.GL;
import org.eclipse.opengl.GLU;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.opengl.GLData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.swt.opengl.GLCanvas;
import org.eclipse.swt.SWT;
public class OpenGLView extends ViewPart {
GLCanvas canvas;
@Override
public void createPartControl(Composite parent) {
// TODO 徭強伏撹圭隈贋功
GLData data = new GLData();
data.depthSize = 1;
data.doubleBuffer = true;
canvas = new GLCanvas(parent, SWT.NO_BACKGROUND, data);
canvas.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
Rectangle rect = canvas.getClientArea();
GL.glViewport(0, 0, rect.width, rect.height);
//僉夲誘唹裳專
GL.glMatrixMode(GL.GL_PROJECTION);
//嶷崔誘唹裳專
GL.glLoadIdentity();
//譜崔完笥曳箭才邑篇夕
GLU.gluPerspective(45.0f, (float) rect.width / (float) rect.height, 0.1f, 100.0f);
//僉夲庁侏鉱賀裳專
GL.glMatrixMode(GL.GL_MODELVIEW);
//嶷崔庁侏鉱賀裳專
GL.glLoadIdentity();
//菜弼嘘尚
GL.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
//譜崔侮業産贋
GL.glClearDepth(1.0f);
//尼強侮業霞編
GL.glEnable(GL.GL_DEPTH_TEST);
|