Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Рекурсия присутствует?
И где эти прикрепленные файлы?
Я код на C++ набрал сам. Строил кривую Безье, но "прилипал" к нулю. То есть я задаю точки далеко от нуля, а он строил из нуля, а потом только обходил предложенные точки. Потом я нашёл Ваш сайт и эту статью. Оказалось, что я забыл возвести t в...
просто я не так понял, здесь мы вращаем точки куба что вращает сам куб. Мне нужно вращать просто 3д объект , данный способ не подходит
Задавайте объект в мировых координатах. Вращайте его относительно мировой системы координат. А при отрисовке преобразуйте в экранные координаты. Посмотрите пример преобразования в экранные координаты.

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Среда программирования: 
IntelliJ IDEA


Чтобы начать работать с OpenGL нужно сначала скачать архив jogamp-all-platforms.7z с сайта:
https://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL
После того как архив скачался, извлекаем в новую папку файлы:

  1. Файлы zip:
    • jogl-java-src.zip
    • gluegen-java-src.zip
  2. Из папки jar:
    • jogl-all.jar
    • jogl-all-natives-windows-amd64.jar
    • jogl-all-natives-windows-i586.jar
    • gluegen-rt.jar
    • gluegen-rt-natives-windows-amd64.jar
    • gluegen-rt-natives-windows-i586.jar


Далее запускаем IntelliJ IDEA и создаем проект или открываем готовый.
Заходим в меню File и нажимаем Project Structure.

Переходим в Modules и нажимаем на зеленый плюс справа.

Далее выбираем JARs os directories и затем из папки, в которую извлекли файлы, добавляем файлы с разрешением jar. Затем выбираем Library, а потом Java и добавляем файлы с разрешением zip. Отмечаем все что добавили галочками и нажимаем Apply и затем OK.

Все,OpenGL подключен. Если нажать на External Libraries, то можно увидеть все что мы подключили.

Теперь напишем пример для отрисовки фигуры(треугольника с градиентом)с помощью средств и библиотек OpenGL.

Код:
OneTriangle:

import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GL2ES3;
import com.jogamp.opengl.glu.GLU;
 
public class OneTriangle {
    protected static void setup( GL2 gl2, int width, int height ) {
        gl2.glMatrixMode( GL2.GL_PROJECTION );
        gl2.glLoadIdentity();
 
        // начало системы координат в левом нижнем углу с шириной и высотой, как и окно
        GLU glu = new GLU();
        glu.gluOrtho2D( 0.0f, width, 0.0f, height );
 
        gl2.glMatrixMode( GL2.GL_MODELVIEW );
        gl2.glLoadIdentity();
 
        gl2.glViewport( 0, 0, width, height );
    }
 
    protected static void render( GL2 gl2, int width, int height ) {
        gl2.glClear( GL.GL_COLOR_BUFFER_BIT );
 
        //рисуем треугольник, заполняющий окно
        gl2.glLoadIdentity();
        gl2.glBegin( GL2ES3.GL_QUADS );
        gl2.glColor3f( 1, 0, 0 );
        gl2.glVertex2f( 0, 0 );
        gl2.glColor3f( 0, 1, 0 );
        gl2.glVertex2f( width, 0 );
        gl2.glColor3f( 0, 0, 1 );
        gl2.glVertex2f( width / 2, height );
        gl2.glColor3f( 0, 0, 1 );
        gl2.glVertex2f( width / 2, height );
        gl2.glEnd();
    }
}

OneTriangleAWT:

import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.GLCapabilities;
import com.jogamp.opengl.awt.GLCanvas;
 
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
public class OneTriangleAWT {
 
    public static void main( String [] args ) {
        GLProfile glprofile = GLProfile.getDefault();
        GLCapabilities glcapabilities = new GLCapabilities( glprofile );
        final GLCanvas glcanvas = new GLCanvas( glcapabilities );
 
        glcanvas.addGLEventListener( new GLEventListener() {
 
            @Override
            public void reshape( GLAutoDrawable glautodrawable, int x, int y, int width, int height ) {
                OneTriangle.setup( glautodrawable.getGL().getGL2(), width, height );
            }
 
            @Override
            public void init( GLAutoDrawable glautodrawable ) {
            }
 
            @Override
            public void dispose( GLAutoDrawable glautodrawable ) {
            }
 
            @Override
            public void display( GLAutoDrawable glautodrawable ) {
                OneTriangle.render( glautodrawable.getGL().getGL2(), glautodrawable.getSurfaceWidth(), glautodrawable.getSurfaceHeight() );
            }
        });
 
 
        final Frame frame = new Frame( "One Triangle AWT" );
        frame.add( glcanvas );
        frame.addWindowListener( new WindowAdapter() {
            public void windowClosing( WindowEvent windowevent ) {
                frame.remove( glcanvas );
                frame.dispose();
                System.exit( 0 );
            }
        });
 
        frame.setSize( 640, 480 );
        frame.setVisible( true );
    }
}

Прикрепленный файлРазмер
Project1.zip11.04 кб