Witam
Pisze program w javie z wykorzystaniem OpenGL.
W programie mamy za pomca katrolek obracac bryly itp, i natrafilem na taki problem:
package gui;
import com.trolltech.qt.core.Qt;
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QPushButton;
import com.trolltech.qt.gui.QSlider;
import com.trolltech.qt.gui.QWidget;
import com.trolltech.qt.opengl.QGLWidget;
import com.trolltech.qt.opengl.*;
public class Main extends QWidget
{
public Main()
{
QPushButton quit = new QPushButton(tr("Zakończ"), this);
quit.setGeometry(400, 446, 100, 30);
QPushButton box = new QPushButton(tr("Sześcian"), this);
box.setGeometry(400, 20, 100, 30);
QPushButton triangle = new QPushButton(tr("Ostrosłup"), this);
triangle.setGeometry(400, 60, 100, 30);
QSlider sliderX = new QSlider(Qt.Orientation.Horizontal, this);
sliderX.setGeometry(10, 415, 370, 20);
sliderX.setRange(0, 360);
sliderX.setValue(0);
QSlider sliderY = new QSlider(Qt.Orientation.Horizontal, this);
sliderY.setGeometry(10, 445, 370, 20);
sliderY.setRange(0, 360);
sliderY.setValue(0);
QSlider sliderZ = new QSlider(Qt.Orientation.Horizontal, this);
sliderZ.setGeometry(10, 475, 370, 20);
sliderZ.setRange(0, 360);
sliderZ.setValue(0);
////////////////////////////////////////////////////////
quit.clicked.connect(QApplication.instance(), "quit()");
}
class MyGLCanvas extends QGLWidget
{
private float rotx;
private float roty;
private float rotz;
private boolean shape;
private boolean light;
GL func = null;//!!!!!!!!!!!!!!!!!
GLContext ctx = null;//!!!!!!!!!!!!!!!!!!
public MyGLCanvas()
{
rotx = 0.0f;
roty = 0.0f;
rotz = 0.0f;
shape = false;
light = false;
}
protected void initializeGL()
{
GLDrawableFactory factory = GLDrawableFactory.getFactory();
ctx = factory.createExternalGLContext();
func = ctx.getGL();
}
protected void PaintGL()
{
func.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
func.glLoadIdentity();
initializeGL();
func.glRotatef(rotx, 1.0f, 0.0f, 0.0f);
func.glRotatef(roty, 0.0f, 1.0f, 0.0f);
func.glRotatef(rotz, 0.0f, 0.0f, 1.0f);
func.glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);
func.glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);
func.glLightfv(GL_LIGHT1, GL_POSITION,LightPosition);
func.glEnable(GL_LIGHT1);
if(!light)
{
func.glDisable(GL_LIGHTING);
}
else
{
func.glEnable(GL_LIGHTING);
}
switch(shape)
{
case false:
func.glBegin(GL_QUADS);
// pierwsza sciana
func.glColor3f(0.0f,1.0f,0.0f);
func.glNormal3f( 0.0f, 1.0f, 0.0f);
func.glVertex3f( 0.5f, 0.5f,-0.5f);
func.glVertex3f(-0.5f, 0.5f,-0.5f);
func.glVertex3f(-0.5f, 0.5f, 0.5f);
func.glVertex3f( 0.5f, 0.5f, 0.5f);
// druga sciana
func.glColor3f(1.0f,0.5f,0.0f);
func.glNormal3f( 0.0f,-1.0f, 0.0f);
func.glVertex3f( 0.5f,-0.5f, 0.5f);
func.glVertex3f(-0.5f,-0.5f, 0.5f);
func.glVertex3f(-0.5f,-0.5f,-0.5f);
func.glVertex3f( 0.5f,-0.5f,-0.5f);
// trzecia sciana
func.glColor3f(1.0f,0.0f,0.0f);
func.glNormal3f( 0.0f, 0.0f, 1.0f);
func.glVertex3f( 0.5f, 0.5f, 0.5f);
func.glVertex3f(-0.5f, 0.5f, 0.5f);
func.glVertex3f(-0.5f,-0.5f, 0.5f);
func.glVertex3f( 0.5f,-0.5f, 0.5f);
// czwarta sciana
func.glColor3f(1.0f,1.0f,0.0f);
func.glNormal3f( 0.0f, 0.0f,-1.0f);
func.glVertex3f( 0.5f,-0.5f,-0.5f);
func.glVertex3f(-0.5f,-0.5f,-0.5f);
func.glVertex3f(-0.5f, 0.5f,-0.5f);
func.glVertex3f( 0.5f, 0.5f,-0.5f);
// piata sciana
func.glColor3f(0.0f,0.0f,1.0f);
func.glNormal3f(-1.0f, 0.0f, 0.0f);
func.glVertex3f(-0.5f, 0.5f, 0.5f);
func.glVertex3f(-0.5f, 0.5f,-0.5f);
func.glVertex3f(-0.5f,-0.5f,-0.5f);
func.glVertex3f(-0.5f,-0.5f, 0.5f);
// szosta sciana
func.glColor3f(1.0f,0.0f,1.0f);
func.glNormal3f( 1.0f, 0.0f, 0.0f);
func.glVertex3f( 0.5f, 0.5f,-0.5f);
func.glVertex3f( 0.5f, 0.5f, 0.5f);
func.glVertex3f( 0.5f,-0.5f, 0.5f);
func.glVertex3f( 0.5f,-0.5f,-0.5f);
func.glEnd();
break;
case true:
func.glBegin(GL_TRIANGLES);
// pierwsz sciana
func.glColor3f(1.0f,0.0f,0.0f);
func.glVertex3f(0.0f, 0.5f, 0.0f);
func.glVertex3f(-0.5f,-0.5f, 0.5f);
func.glVertex3f(0.5f,-0.5f, 0.5f);
// druga sciana
func.glColor3f(0.0f,1.0f,0.0f);
func.glVertex3f( 0.0f, 0.5f, 0.0f);
func.glVertex3f( 0.5f,-0.5f, 0.5f);
func.glVertex3f( 0.5f,-0.5f, -0.5f);
// trzecia sciana
func.glColor3f(0.0f,0.0f,1.0f);
func.glVertex3f( 0.0f, 0.5f, 0.0f);
func.glVertex3f( 0.5f,-0.5f, -0.5f);
func.glVertex3f(-0.5f,-0.5f, -0.5f);
// czwarta sciana
func.glColor3f(1.0f,1.0f,0.0f);
func.glVertex3f( 0.0f, 0.5f, 0.0f);
func.glVertex3f(-0.5f,-0.5f,-0.5f);
func.glVertex3f(-0.5f,-0.5f, 0.5f);
func.glEnd();
func.glBegin(GL_QUADS);
// podstawa
func.glColor3f(0.0f,1.0f,1.0f);
func.glVertex3f( -0.5f,-0.5f, -0.5f);
func.glVertex3f(0.5f,-0.5f, -0.5f);
func.glVertex3f(0.5f,-0.5f, 0.5f);
func.glVertex3f(-0.5f,-0.5f, 0.5f);
func.glEnd();
break;
}
func.swapBuffer();
}
protected void ChangeX(int x)
{
rotx = x;
updateGL();
}
protected void ChangeY(int y)
{
roty = y;
updateGL();
}
protected void ChangeZ(int z)
{
rotz = z;
updateGL();
}
protected void Box()
{
shape = false;
updateGL();
}
protected void Pyramid()
{
shape = true;
updateGL();
}
protected void LightsOnOff()
{
light = !light;
updateGL();
}
}
public static void main(String[] args)
{
QApplication.initialize(args);
Main Window = new Main();
Window.resize(520, 520);
Window.setWindowTitle("Prosty program do renderowania grafiki");
Window.show();
QApplication.exec();
}
}
chodzi o dwie linijki
GL func = null;
GLContext ctx = null;
nie wiem dlaczego nie rozpoznaje tych obiktow.
Dodam ze nie programuje w javie ale ten projekt musze zrobic w tym jezyku
Z gory dzieki za zainteresowanie:)