Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите что нужно для OpenGL 1.1 - JOGL? 
:(
    Опции темы
Killer_13
  Дата 10.11.2011, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Подскажите пожалуйста, а то сил уже нету, задолбался уже тыкать пальцем в небо, а где расписано все нету!

Значит так, мне предстоит делать проект на OpenGL 1.1 - поскольку на С/С++ возвращаться не хочется, - выбрал для себя альтернативу JOGL - но ничего толком сделать не могу, те так пишут, те так.
Ссылки битые - насколько понял JOGL был раньше здесь http://java.net/projects/jogl/
Теперь скачать можно по этому адресу. http://jogamp.org/

Значит так, вроде все настроил - скачал jogl-2.0-b367-20110405-windows-amd64, добавил 4 класса в проект jogl-all.jar ..и так д...

Но какой пример не посмотрю - всегда трабла с классами!!!!
Я не могу понять - каждый пишет по своему, ткните пож пальцем где мне смотреть - хоть на турецком, а то я за неделю так и не продвинулся. :(

Конкретный пример: взял любой класс отсюда 
Код

package MyPack;

import java.awt.event.*;
import javax.swing.*;

import java.nio.*;

import javax.media.opengl.DebugGL2;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.*;
import com.jogamp.opengl.util.*;

public class MyFrame
  extends JFrame
    implements GLEventListener, KeyListener
{
  private GLU glu;
  private GLCapabilities caps;
  private GLCanvas canvas;
  //
  private static final int PT = 1;
  private static final int STROKE = 2;
  private static final int END = 3;

  // * C struct. Compare this to charpoint class.
  // typedef struct charpoint
  // {
  // GLfloat x, y;
  // int type;
  // } CP;
  private class charpoint
  {
    public float x;
    public float y;
    public int type;

    public charpoint(float x, float y, int type)
    {
      this.x = x;
      this.y = y;
      this.type = type;
    }
  }

  // * Saved here from original for you to see the difference
  // CP Adata[] =
  // {
  // { 0, 0, PT}, {0, 9, PT}, {1, 10, PT}, {4, 10, PT},
  // {5, 9, PT}, {5, 0, STROKE}, {0, 5, PT}, {5, 5, END}
  // };
  charpoint Adata[] =
  { new charpoint(0, 0, PT), new charpoint(0, 9, PT), //
    new charpoint(1, 10, PT), new charpoint(4, 10, PT),//
    new charpoint(5, 9, PT), new charpoint(5, 0, STROKE),//
    new charpoint(0, 5, PT), new charpoint(5, 5, END) };

  charpoint Edata[] =
  { new charpoint(5, 0, PT), new charpoint(0, 0, PT), //
    new charpoint(0, 10, PT), new charpoint(5, 10, STROKE),//
    new charpoint(0, 5, PT), new charpoint(4, 5, END) };

  charpoint Pdata[] =
  { new charpoint(0, 0, PT), new charpoint(0, 10, PT),//
    new charpoint(4, 10, PT), new charpoint(5, 9, PT),//
    new charpoint(5, 6, PT), new charpoint(4, 5, PT), //
    new charpoint(0, 5, END) };

  charpoint Rdata[] =
  { new charpoint(0, 0, PT), new charpoint(0, 10, PT),//
    new charpoint(4, 10, PT), new charpoint(5, 9, PT),//
    new charpoint(5, 6, PT), new charpoint(4, 5, PT),//
    new charpoint(0, 5, STROKE), new charpoint(3, 5, PT),//
    new charpoint(5, 0, END) };

  charpoint Sdata[] =
  { new charpoint(0, 1, PT), new charpoint(1, 0, PT), //
    new charpoint(4, 0, PT), new charpoint(5, 1, PT),//
    new charpoint(5, 4, PT), new charpoint(4, 5, PT), //
    new charpoint(1, 5, PT), new charpoint(0, 6, PT), //
    new charpoint(0, 9, PT), new charpoint(1, 10, PT),//
    new charpoint(4, 10, PT), new charpoint(5, 9, END) };

  // char *test1 = "A SPARE SERAPE APPEARS AS"; C char ptr to str ...
  // char *test2 = "APES PREPARE RARE PEPPERS";
  private String test1 = "A SPARE SERAPE APPEARS AS";// String object
  private String test2 = "APES PREPARE RARE PEPPERS";

  public MyFrame()
  {
    super("stroke");

    caps = new GLCapabilities();
    canvas = new GLCanvas(caps);
    canvas.addGLEventListener(this);
    canvas.addKeyListener(this);
 
    getContentPane().add(canvas);
  }

  public void run()
  {
    setSize(440, 120);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    canvas.requestFocusInWindow();
  }

  public static void main(String[] args)
  {
    new MyFrame().run();
  }

  /* Create a display list for each of 6 characters */
  public void init(GLAutoDrawable drawable)
  {
    GL gl = drawable.getGL();
    glu = new GLU();

    int base;

    gl.glShadeModel(GL.GL_FLAT);

    base = gl.glGenLists(128);
    gl.glListBase(base);
    gl.glNewList(base + 'A', GL.GL_COMPILE);
    drawLetter(gl, Adata);
    gl.glEndList();
    gl.glNewList(base + 'E', GL.GL_COMPILE);
    drawLetter(gl, Edata);
    gl.glEndList();
    gl.glNewList(base + 'P', GL.GL_COMPILE);
    drawLetter(gl, Pdata);
    gl.glEndList();
    gl.glNewList(base + 'R', GL.GL_COMPILE);
    drawLetter(gl, Rdata);
    gl.glEndList();
    gl.glNewList(base + 'S', GL.GL_COMPILE);
    drawLetter(gl, Sdata);
    gl.glEndList();
    gl.glNewList(base + ' ', GL.GL_COMPILE);
    gl.glTranslatef(8.0f, 0.0f, 0.0f);
    gl.glEndList();
  }

  public void display(GLAutoDrawable drawable)
  {
    GL gl = drawable.getGL();
    //
    gl.glClear(GL.GL_COLOR_BUFFER_BIT);
    gl.glColor3f(1.0f, 1.0f, 1.0f);

    gl.glPushMatrix();
    gl.glScalef(2.0f, 2.0f, 2.0f);
    gl.glTranslatef(10.0f, 30.0f, 0.0f);
    this.printStrokedString(gl, test1);
    gl.glPopMatrix();

    gl.glPushMatrix();
    gl.glScalef(2.0f, 2.0f, 2.0f);
    gl.glTranslatef(10.0f, 13.0f, 0.0f);
    this.printStrokedString(gl, test2);
    gl.glPopMatrix();

    gl.glFlush();
  }

  public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h)
  {
    GL gl = drawable.getGL();

    gl.glViewport(0, 0, w, h);
    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    glu.gluOrtho2D(0, w, 0, h);
    gl.glMatrixMode(GL.GL_MODELVIEW);
    gl.glLoadIdentity();
  }

  public void displayChanged(GLAutoDrawable drawable, boolean modeChanged,
      boolean deviceChanged)
  {
  }

  /*
   * interprets the instructions from the array for that letter and renders the
   * letter with line segments.
   */
  private void drawLetter(GL gl, charpoint[] l)
  {
    int i = 0;
    gl.glBegin(GL.GL_LINE_STRIP);
    while (i < l.length)
    {
      switch (l[i].type) {
        case PT:
          gl.glVertex2f(l[i].x, l[i].y);
          break;
        case STROKE:
          gl.glVertex2f(l[i].x, l[i].y);
          gl.glEnd();
          gl.glBegin(GL.GL_LINE_STRIP);
          break;
        case END:
          gl.glVertex2f(l[i].x, l[i].y);
          gl.glEnd();
          gl.glTranslatef(8.0f, 0.0f, 0.0f);
          return;
      }
      i++;// System.out.println(i+" ");
    }
  }

  // private void printStrokedString(char *s)
  private void printStrokedString(GL gl, String s)
  {
    int len = s.length();
    ByteBuffer str = BufferUtil.newByteBuffer(len);
    str.put(s.getBytes());
    str.rewind();
    gl.glCallLists(len, GL.GL_BYTE, str);
  }

  public void keyTyped(KeyEvent key)
  {
  }

  public void keyPressed(KeyEvent key)
  {
    switch (key.getKeyCode()) {
      case KeyEvent.VK_ESCAPE:
        System.exit(0);
        break;

      default:
        break;
    }
  }

  public void keyReleased(KeyEvent key)
  {
  }

@Override
public void dispose(GLAutoDrawable arg0) {
    // TODO Auto-generated method stub
    
}
}


скажите пожалуйста, почему люди писали примеры,
- а у меня не работает КОНСТРУКТОР в 96 строке???
- переменная GL gl не видит методов  gl.glVertex2f, glScalef, gl.glPushMatrix() и так д!
- посмотрел в http://jogamp.org/deployment/jogamp-next/j...adoc_jogl_spec/  - а эти методы в классе DebugGL2 - с какой радости?


Подскажите, я понимаю, что много текста, и так д... вопрос не оч конкретный, но все же, я думаю на него достаточно 2 строки ответа, чтоб я понял что к чему
Заранее спасибо.!


Это сообщение отредактировал(а) Killer_13 - 10.11.2011, 18:43
PM MAIL   Вверх
AlexKozlov
Дата 10.11.2011, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.12.2008

Репутация: 1
Всего: 1



Тебе критично OpenGL 1.1? С 2.0 будет легче и могу подкинуть рабочих примеров.
А конструктор попробуй переделать по такому образу:
Код

        GLProfile glprofile = GLProfile.getDefault();
        GLCapabilities glcapabilities = new GLCapabilities( glprofile );
        canvas = new GLCanvas(glcapabilities);

PM MAIL   Вверх
Killer_13
Дата 10.11.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



да честно говоря, я уже и сам не знаю. А где посмотреть разницу? 
Что за что отвечает?
Если подкинешь примеры, - их что неззя будет переделать в 1? Я же не супер приложение какое-то, элементарное что-то

Где вообще смотреть и читать как что и к чему о JOGL инфы оч мало - поделись. 

Спасибо.

Добавлено через 7 минут и 31 секунду
Конструктор прохавало, где всего этого почитать, - только разжевано, что за чем и что к чему... Пасиб

и почему же - переменная GL gl не видит методов  gl.glVertex2f, glScalef, gl.glPushMatrix() и так д!?
PM MAIL   Вверх
AlexKozlov
Дата 10.11.2011, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.12.2008

Репутация: 1
Всего: 1



Цитата(Killer_13 @  10.11.2011,  19:24 Найти цитируемый пост)
и почему же - переменная GL gl не видит методов  gl.glVertex2f, glScalef, gl.glPushMatrix() и так д!? 

Я тоже не ахти какой спец в OpenGL, но глядя на JOGL возникает мысль что все эти методы появились в openGL 2.0. Иначе бы какого хрена они их засунули в GL2...

во всяком случае я получаю GL2 и там все это точно есть. А в GL таки да, нету. Как и многие константы - что-то описано в GL, а что-то в GL2

GL2 gl=glautodrawable.getGL().getGL2();

попробуй.

инфы в читабельном виде у меня тоже нет. Роюсь на jogamp и в гугле, ну и вся голова уже в шишках... Спотыкаюсь порой на ровном месте

Добавлено через 4 минуты и 29 секунд
Попробуй для начала запустить один из этих примеров
они должны работать. Во всяком случае я надеюсь что только у меня на Ubunte они не работают, там требуется исполнить  небольшой шаманский танец с бубном... после чего все нормально. 
PM MAIL   Вверх
Killer_13
Дата 10.11.2011, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Вот что получил в ответ, хотя ошибок нет, библиотеки подключены, gluegen-rt тоже, в чем фигня, блииинннн знающие люди ну подскажите с этим GL, GL2 и бла, бла бла, 

Код

Exception in thread "main" java.lang.UnsatisfiedLinkError: no gluegen-rt in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at com.jogamp.gluegen.runtime.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:102)
    at com.jogamp.gluegen.runtime.NativeLibLoader.access$000(NativeLibLoader.java:51)
    at com.jogamp.gluegen.runtime.NativeLibLoader$1.run(NativeLibLoader.java:70)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.jogamp.gluegen.runtime.NativeLibLoader.loadGlueGenRT(NativeLibLoader.java:68)
    at com.jogamp.common.jvm.JVMUtil.<clinit>(JVMUtil.java:56)
    at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:1141)
    at my.OneTriangleAWT.<clinit>(OneTriangleAWT.java:22)



Добавлено через 9 минут и 9 секунд
GL2 gl=glautodrawable.getGL().getGL2(); - glautodrawable - не знет

Дык мне понять нужно, что и к чему, а так я уже несколько дней копирую и вставляю код.. и толку никакого...
PM MAIL   Вверх
Farmazon
Дата 10.11.2011, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Разработчик
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 7.7.2006

Репутация: 1
Всего: 5



lwjgl попырь http://lwjgl.org/


--------------------
Таково моё общее мнение.
PM MAIL WWW   Вверх
Killer_13
Дата 11.11.2011, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Farmazon @  10.11.2011,  21:13 Найти цитируемый пост)
lwjgl попырь http://lwjgl.org/ 

Пасиб конечно, но мне наверное подойдет только JOGL.
PM MAIL   Вверх
AlexKozlov
Дата 11.11.2011, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.12.2008

Репутация: 1
Всего: 1



Цитата(Killer_13 @  10.11.2011,  20:33 Найти цитируемый пост)
Exception in thread "main" java.lang.UnsatisfiedLinkError: no gluegen-rt in java.library.path

Уверен что подключил нативные библтотеки? Указывал где dll-ки лежат?

Напиши в какой IDE работаешь

Это сообщение отредактировал(а) AlexKozlov - 11.11.2011, 07:42
PM MAIL   Вверх
Killer_13
Дата 11.11.2011, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(AlexKozlov @  11.11.2011,  05:59 Найти цитируемый пост)
Уверен что подключил нативные библтотеки? Указывал где dll-ки лежат?


Бррр, а что еще и dll нужно подключать? Eclipse Indigo.
PM MAIL   Вверх
AlexKozlov
Дата 13.11.2011, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.12.2008

Репутация: 1
Всего: 1



Цитата(Killer_13 @  11.11.2011,  15:47 Найти цитируемый пост)
Бррр, а что еще и dll нужно подключать? Eclipse Indigo. 


А то! JOGL использует нативные либы, у меня lib*.so у тебя винда, стало быть dll. Разберешься куда их подсунуть или подсказывать надо? В туториалах на jogamp'е это есть, RTFM
PM MAIL   Вверх
Killer_13
Дата 13.11.2011, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Уже в принципе разобрался, dll подключил, и о чудо я случайно встретил JOGL 1.1.1 установил и теперь никаких глупых ошибок и так д...
Понял, что за что отвечает, для чего какой класс нужен и так д...

Зарядился туториалами и книгами и начинаю изучать OpenGL.

Может вы мне подскажете почему у меня не срабатывает glRotatef ???

Это уже так сказать вопрос не по JOGL, а по OpenGL потому, что команды то идентичны - не могли бы вы глянуть?

Код

package main;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;

public class CanvasEvent implements GLEventListener, KeyListener {

    private float rquad = 0.0f;
    private float rtri = 0.0f;

    public void init(GLAutoDrawable arg0)
    {
        GL gl = arg0.getGL();
        gl.glShadeModel(GL.GL_SMOOTH);              // Enable Smooth Shading
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    // Black Background
        gl.glClearDepth(1.0f);                      // Depth Buffer Setup
        gl.glEnable(GL.GL_DEPTH_TEST);        // Enables Depth Testing
        gl.glDepthFunc(GL.GL_LEQUAL);        // The Type Of Depth Testing To Do
        
        // Really Nice Perspective Calculations
        gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);  
    }

    public void display(GLAutoDrawable arg0)
    {
        final GL gl = arg0.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
        gl.glLoadIdentity();
        gl.glTranslatef(-1.5f, 0.0f, -6.0f);
        gl.glRotatef(rtri, 0.0f, 1.0f, 0.0f);
        gl.glBegin(GL.GL_TRIANGLES);        // Drawing Using Triangles
        gl.glColor3f(1.0f, 0.0f, 0.0f);   // Set the current drawing color to red
        gl.glVertex3f(0.0f, 1.0f, 0.0f);  // Top
        gl.glColor3f(0.0f, 1.0f, 0.0f);   // Set the current drawing color to green
        gl.glVertex3f(-1.0f, -1.0f, 0.0f);  // Bottom Left
        gl.glColor3f(0.0f, 0.0f, 1.0f);   // Set the current drawing color to blue
        gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
        gl.glEnd();        // Finished Drawing The Triangle
        gl.glLoadIdentity();
        gl.glTranslatef(1.5f, 0.0f, -6.0f);
        gl.glRotatef(rquad, 1.0f, 0.0f, 0.0f);
        gl.glBegin(GL.GL_QUADS);             // Draw A Quad
        gl.glColor3f(0.5f, 0.5f, 1.0f);   // Set the current drawing color to light blue
        gl.glVertex3f(-1.0f, 1.0f, 0.0f);  // Top Left
        gl.glVertex3f(1.0f, 1.0f, 0.0f);  // Top Right
        gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
        gl.glVertex3f(-1.0f, -1.0f, 0.0f);  // Bottom Left
        gl.glEnd();        // Done Drawing The Quad
        gl.glFlush();
        rtri += 0.2f;
        rquad += 0.15f;
        
    }

    public void drawField(GL gl, GLU glu)
    {
     gl.glRotatef(rtri,0.0f,1.0f,0.0f); 
        gl.glBegin(GL.GL_QUADS);
            gl.glVertex3f(-6.5f, -1.5f, -6.5f);
            gl.glVertex3f(-6.5f, -1.5f, 6.5f);
            gl.glVertex3f(6.5f, -1.5f, 6.5f);
            gl.glVertex3f(6.5f, -1.5f, -6.5f);
        gl.glEnd();
    }

    @Override
    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

        final GL gl = drawable.getGL();
        final GLU glu = new GLU();

        if (height <= 0) // avoid a divide by zero error!
            height = 1;
        final float h = (float) width / (float) height;
        // don't need to call this according to jogl docs
        // gl.glViewport(0, 0, width, height);  
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, h, 1.0, 20.0);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

    private void rotate() {
        rtri += 10;
    }

    @Override
    public void keyPressed(KeyEvent key) {

        switch (key.getKeyCode()) {
        case KeyEvent.VK_ESCAPE:
            System.exit(0);
        case KeyEvent.VK_RIGHT:
            rotate();
        default:
            break;
        }

    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }
}



Спасибо заранее.

И еще вопросик в догонку. Как лучше объявлять переменные? Глобально или в каждой функции? Потому что в примерах они объявляются в каждой функции, не пойму зачем
Код

final GL gl = drawable.getGL();
        final GLU glu = new GLU();

PM MAIL   Вверх
AlexKozlov
Дата 13.11.2011, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.12.2008

Репутация: 1
Всего: 1



Цитата(Killer_13 @  13.11.2011,  18:59 Найти цитируемый пост)
Как лучше объявлять переменные? Глобально или в каждой функции? Потому что в примерах они объявляются в каждой функции, не пойму зачем


GLU и подобные ей я объявляю один раз потому как ни от чего она явным образом не зависит, а GL/GL2 должен браться из GLAutoDrawable, который не зря же ведь каждый раз передается в функцию отрисовки? 

Цитата(Killer_13 @  13.11.2011,  18:59 Найти цитируемый пост)
Может вы мне подскажете почему у меня не срабатывает glRotatef ???

Я не заметил где вы уведомляете окно, что ему нужна перерисовка - вызовом repaint, update или что-то в таком духе - дело тут даже не в OpenGL а в AWT или Swing, не знаю что именно вы там используете. Подозреваю что если у вашей программы изменить размер окна - то внезапно один раз она повернет изображение smile))) потому как тут перерисовка вызовется автоматически. А во всех остальных случаях в обработке событий мыши или клавиатуры это надо делать вам
PM MAIL   Вверх
Killer_13
Дата 13.11.2011, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(AlexKozlov @  13.11.2011,  20:46 Найти цитируемый пост)
GLU и подобные ей я объявляю один раз потому как ни от чего она явным образом не зависит, а GL/GL2 должен браться из GLAutoDrawable, который не зря же ведь каждый раз передается в функцию отрисовки? 

С этим понятно.


Цитата(AlexKozlov @  13.11.2011,  20:46 Найти цитируемый пост)
Я не заметил где вы уведомляете окно, что ему нужна перерисовка - вызовом repaint, update или что-то в таком духе - дело тут даже не в OpenGL а в AWT или Swing, не знаю что именно вы там используете. Подозреваю что если у вашей программы изменить размер окна - то внезапно один раз она повернет изображение smile))) потому как тут перерисовка вызовется автоматически. А во всех остальных случаях в обработке событий мыши или клавиатуры это надо делать вам 

Я смотрел на различные примеры, при использовании вращения функция reshape нигде явно не вызывалась, да так и есть как вы говорите, вращение происходит при изменении окна.
Ну а я не могу понять, что не так, может у вас есть рабочий пример, где задействованы клавиши для вращения?

Спасибо.

Добавлено через 3 минуты и 7 секунд
ааа, ну и вот класс где собственно создается окно
Код

package main;

import javax.media.opengl.GLCanvas;
import javax.swing.JFrame;

public class Window extends JFrame {

    private static final long serialVersionUID = 1L;

    private GLCanvas canvas;
    private CanvasEvent canvasEvt;

    public Window() {
        this.canvas = new GLCanvas();
        canvasEvt = new CanvasEvent();
        this.canvas.addGLEventListener(canvasEvt);
        this.canvas.addKeyListener(canvasEvt);

        this.getContentPane().add(canvas);
    }

    private void run() {

        this.setSize(600, 600);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        canvas.requestFocusInWindow();
    }

    public static void main(String[] args) {
        new Window().run();
    }
}


PM MAIL   Вверх
AlexKozlov
Дата 14.11.2011, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.12.2008

Репутация: 1
Всего: 1



добавьте в описание вашего главного класса:
static public Window mainWindow;

и в конструкторе:
mainWindow=this;

далее поправьте свою фукцию rotate:

Код

private void rotate() {
        rtri += 10;
        mainWindow.repaint();
    }


http://download.oracle.com/javase/1.4.2/do....html#repaint()
PM MAIL   Вверх
Killer_13
Дата 14.11.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Хах, забыл о этом. Ну оно то вроде логично, но по ходу быть его не должно.

Посмотрите хотя бы на этот пример, да и я много других видал.

Почему он работает прекрасно без вызова свинговского решейпа?

http://www.java-tips.org/other-api-tips/jo...and-rotated.htm
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1141 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.