Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 18:47   #1
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию Куб в OPENGL

Тут такая проблема... когда вращаю этот кубик обрезанный, он мне грани криво рисует, в чём проблема?
Вложения
Тип файла: rar 1.rar (193.5 Кб, 65 просмотров)
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума Ответить с цитированием
Старый 17.04.2010, 19:50   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Выложите скриншот лучше, а то не у всех есть подключаемые вами модули...

Просматривал код, не нашёл включения буфера глубины, может, это... В любом случае скриншот поможет =)
Изобретатель велосипедов

Последний раз редактировалось Selestis; 17.04.2010 в 19:55.
Selestis вне форума Ответить с цитированием
Старый 17.04.2010, 21:47   #3
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию

glEnable(GL_DEPTH_TEST); тут я разве не подключаю глубину?
Изображения
Тип файла: jpg Безымянный.JPG (104.7 Кб, 193 просмотров)
Вложения
Тип файла: rar opengl_header_delphi.rar (137.3 Кб, 35 просмотров)
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума Ответить с цитированием
Старый 17.04.2010, 22:04   #4
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Хотел посмотреть ваш проект, но увы там вирус - посмотрите вот эту тему Клац
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 17.04.2010, 22:41   #5
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию

Ага, спасибо.
Код:
unit Main_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OpenGl, Gl, GLUtils;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  alpha1, alpha2 : real;
  x0, y0 : integer;
  check : boolean;
implementation
uses unit3;
{$R *.dfm}

Procedure DrawImage;
type matr = array[0..3,0..3] of GLfloat;
const Rxx: matr =  ((1, 0, 0, 0),
                   ( 0, 1, 0, 0),
                   ( 0, 0, 1, 0),
                   ( 0, 0, 0, 1));
var m: matr;
    teta, fi, f, fx, fy, fz : real;
    i : integer;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

//триметрия
  ViewPort(0,0,950,950);
  m:=Rxx;
  glGetFloatv(GL_MODELVIEW_MATRIX, @m);
  teta := -degtorad(alpha1);
  fi := -degtorad(alpha2);
  m[0,0] := cos(fi);
  m[0,1] := sin(fi)*sin(teta);
  m[1,1] := cos(teta);
  m[2,0] := sin(fi);
  m[2,1] := -cos(fi)*sin(teta);
  m[2,2] := 0;
  glLoadMatrixf(@m);

  glEnable(GL_DEPTH_TEST);

  DrawScene1;
  swapGLbuffers;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  check := false;
  alpha1 := 30;
  alpha2 := 60;
  InitOpengl(handle);
  clientwidth:=clientheight;
  glViewPort(0,0, clientwidth, clientheight);
  glMatrixMode(GL_PROJECTION);
  glOrtho(-50,50,-50,50,-1,1);
  glMatrixMode(GL_MODELVIEW);
  glClearColor(1.3,0.0,1.3,0.0);
  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CLoseOpengl(Handle);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  DrawImage;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  check := true;
  x0 := x;
  y0 := y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if check then
  begin
    alpha1 := alpha1 - (y0-y)/2;
    alpha2 := alpha2 - (x0-x)/2;
    x0 := x;
    y0 := y;
    formPaint(form1);
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  check := false;
end;

end.
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума Ответить с цитированием
Старый 18.04.2010, 11:18   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

явно что-то с буфером глубины

Код:
glEnable(GL_DEPTH_TEST);
поставь это в инициализацию, а не прямо перед кодом отрисовки
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 18.04.2010, 12:13   #7
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию

Пробовал, тот же самый трабл.
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума Ответить с цитированием
Старый 18.04.2010, 18:20   #8
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Попробуйте GL_POLYGON поменять на GL_QUADS. Может, всё из-за порядка задания вершин, не помню как точно подаются данные для полигонов...
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 18.04.2010, 18:59   #9
maxflint
работаю за еду
Пользователь
 
Аватар для maxflint
 
Регистрация: 31.10.2009
Сообщений: 64
По умолчанию

Эх... не помогло
Вотан ждёт меня в своих чертогах, на свой вечный пир!
maxflint вне форума Ответить с цитированием
Старый 18.04.2010, 19:06   #10
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Слушайте, да у вас, похоже, координаты не те: там в задании вершин разве где-то есть "0"? У вас типа -0.5 или +0.5, так ведь? Поменяйте попробуйте. И квадами их. Или рисуйте нормальный полигон по шести точкам, но, думаю, это не лучший вариант...
Изобретатель велосипедов

Последний раз редактировалось Selestis; 18.04.2010 в 19:17.
Selestis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возведение вещественного числа в куб SL1CK Общие вопросы .NET 1 31.01.2010 17:48
OpenGL в delphi. Как перемещать куб с помощью мыши Xawk Мультимедиа в Delphi 2 08.12.2009 12:20
OLAP-куб в Excel асеныш Microsoft Office Excel 1 02.11.2009 10:10
Как реализовать куб выражения? Mr.Qwerty Паскаль, Turbo Pascal, PascalABC.NET 2 02.09.2009 06:58
магический куб Diller Помощь студентам 3 09.09.2007 11:35