Java + OpenGL

Odpowiedz Nowy wątek
phi
2009-02-26 10:43
phi

Rejestracja: 11 lat temu

Ostatnio: 11 lat temu

0

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:)

Pozostało 580 znaków

2009-02-26 12:45
Moderator

Rejestracja: 11 lat temu

Ostatnio: 17 godzin temu

0

Dowiedz się (poszukaj w dokumentacji) z jakiego są pakietu i zaimportuj ten pakiet.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

phi
2009-02-26 16:27
phi

Rejestracja: 11 lat temu

Ostatnio: 11 lat temu

0

Szukalem w dokumentacji i nic nie znalazlem niestety
Poza tym projekt robie w NetBeansie i on automatyczne importuje pakiety
Bdw na stronnie http://doc.trolltech.com/qtjambi-4.4/html/com/trolltech/qt/opengl/QGLWidget.html#swapBuffers() jest podany przykalad i to na nim sie wzoruje...

Pozostało 580 znaków

2009-02-26 16:58
Moderator

Rejestracja: 11 lat temu

Ostatnio: 17 godzin temu

0

Zajrzałem do tej dokumentacji i nie znalazłem GL i GLContext, znalazłem natomiast QGL i QGLContext, nie pomyliłeś się?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

phi
2009-02-26 17:11
phi

Rejestracja: 11 lat temu

Ostatnio: 11 lat temu

0

Ok zamienilem te dwie linijki i dalej nie dziala...:(
Wysypuje sie w funkji initializeGL
Poza tym w przykaladzie z tej strony jest GL i GLContext wiec powinno dzialac

Pozostało 580 znaków

2009-02-26 17:21
Moderator

Rejestracja: 11 lat temu

Ostatnio: 17 godzin temu

0

W którym przykładzie?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

phi
2009-02-26 17:23
phi

Rejestracja: 11 lat temu

Ostatnio: 11 lat temu

0

http://doc.trolltech.com/qtjam[...]l/QGLWidget.html#swapBuffers()
na samej gorze(example)

Pozostało 580 znaków

2009-02-26 17:31
Moderator

Rejestracja: 11 lat temu

Ostatnio: 17 godzin temu

0

Może jest błąd w przykładzie. W którym miejscu i w jaki sposób się wysypuje?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

phi
2009-02-26 17:36
phi

Rejestracja: 11 lat temu

Ostatnio: 11 lat temu

0

od:
GLDrawableFactory factory = GLDrawableFactory.getFactory();
:
:
:
do konca metody PaintGL
can not find symbol : method glColor3f(float, float, float) location: interface com.trolltech.qt.opengl.QGL

Pozostało 580 znaków

phi
2009-02-26 17:37
phi

Rejestracja: 11 lat temu

Ostatnio: 11 lat temu

0

czyli wszedzie tam gdze jest poprzedzona func.*

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0