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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2009, 19:08   #1
tiger
Пользователь
 
Регистрация: 30.03.2008
Сообщений: 52
По умолчанию помогите найти ошибку в лабе.OpenGL.

Нужно сделать лабораторную: нарисовать по центру какую-нибудь фигуру, сделать копии этой фигуры вокруг нее, и вращать фигуры которые мы скопировали вокруг нашей фигуры. но у меня почему-то вращается и сама центральная фигура. кто-то может подправить код?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,OpenGL;

type
  TForm1 = class(TForm)
  procedure SetDcPixelFormat(hdc:HDC);
    procedure FormPaint(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  hrc:HGLRC;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.SetDcPixelFormat(hdc: HDC);
var pfd:TPixelFormatDescriptor;
nPixelFormat:Integer;
begin
FillChar(pfd,SizeOf(pfd),0);
pfd.dwFlags:=PFD_DRAW_TO_WINDOW or
PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat:=ChoosePixelFormat(hdc,@pfd);
SetPixelFormat(hdc,nPixelFormat,@pfd);
end;



procedure TForm1.FormPaint(Sender: TObject);
var i,j:integer;
begin
wglMakeCurrent(Canvas.Handle,hrc);
glViewPort(0,0,ClientWidth,ClientHeight);
glClearColor(0.1,0.4,0.7,0.1);
glClear(GL_COLOR_BUFFER_BIT);
glRotate(10,0,0,1);
glPushMatrix;
glTranslatef(0.58,0.35,0);
for i:=0 to 8 do
begin
glTranslatef(-0.35,0.3,0);
glRotate(40,0,0,1);
glBegin(GL_TRIANGLES);
  glcolor3f(0.4,0.9,0.6);
  glVertex2f(-0.2,-0.2);
  glcolor3f(0.5,0.5,0.6);
  glVertex2f(0.2,-0.2);
  glcolor3f(0.2,0.8,0.6);
  glVertex2f(0,0.2);
glEnd();

glBegin(GL_TRIANGLES);
  glcolor3f(0.4,0.9,0.9);
  glVertex2f(-0.15,-0.1);
  glcolor3f(0.5,0.5,0.9);
  glVertex2f(-0.2,0.05);
  glcolor3f(0.2,0.8,0.9);
  glVertex2f(-0.05,0.1);
glEnd();

glBegin(GL_TRIANGLES);
  glcolor3f(0.8,0.9,0.6);
  glVertex2f(0.15,-0.1);
  glcolor3f(0.8,0.9,0.6);
  glVertex2f(0.2,0.05);
  glcolor3f(0.8,0.9,0.6);
  glVertex2f(0.05,0.1);
glEnd();

glBegin(GL_TRIANGLES);
  glcolor3f(0.9,0.9,0.6);
  glVertex2f(-0.1,-0.2);
  glcolor3f(0.9,0.5,0.6);
  glVertex2f(0.1,-0.2);
  glcolor3f(0.9,0.8,0.6);
  glVertex2f(0,-0.3);
glEnd();

glBegin(GL_LINES);
  glcolor3f(0.9,0.9,0.6);
  glVertex2f(-0.2,-0.2);
  glcolor3f(0.9,0.9,0.6);
  glVertex2f(0.1,0);
  glcolor3f(0.4,0.9,0.9);
  glVertex2f(0.2,-0.2);
  glcolor3f(0.2,0.5,0.9);
  glVertex2f(-0.1,0);
  glcolor3f(0.9,0.9,0.6);
  glVertex2f(0,0.2);
  glcolor3f(0.9,0.5,0.9);
  glVertex2f(0,-0.2);
glEnd();

{glLineWidth(2);
}glEnable(Gl_LINE_SMOOTH);
glBegin(GL_LINE_LOOP);
 for j:=0 to 256 do
    begin
    glColor3f(random,random,random);
    glVertex2f(0.12*sin(2*PI*(j/256)),-0.06-0.13*cos(2*PI*(j/256)));
    end;
glEnd();

end;
{glTranslatef(-0.58,-0.35,0);
 }

glPopMatrix;
{glRotate(-10,0,0,1);
}glBegin(GL_TRIANGLES);
  glcolor3f(0.4,0.9,0.6);
  glVertex2f(-0.2,-0.2);
  glcolor3f(0.5,0.5,0.6);
  glVertex2f(0.2,-0.2);
  glcolor3f(0.2,0.8,0.6);
  glVertex2f(0,0.2);
glEnd();

glBegin(GL_TRIANGLES);
  glcolor3f(0.4,0.9,0.9);
  glVertex2f(-0.15,-0.1);
  glcolor3f(0.5,0.5,0.9);
  glVertex2f(-0.2,0.05);
  glcolor3f(0.2,0.8,0.9);
  glVertex2f(-0.05,0.1);
glEnd();

glBegin(GL_TRIANGLES);
  glcolor3f(0.8,0.9,0.6);
  glVertex2f(0.15,-0.1);
  glcolor3f(0.8,0.9,0.6);
  glVertex2f(0.2,0.05);
  glcolor3f(0.8,0.9,0.6);
  glVertex2f(0.05,0.1);
glEnd();

glBegin(GL_TRIANGLES);
  glcolor3f(0.9,0.9,0.6);
  glVertex2f(-0.1,-0.2);
  glcolor3f(0.9,0.5,0.6);
  glVertex2f(0.1,-0.2);
  glcolor3f(0.9,0.8,0.6);
  glVertex2f(0,-0.3);
glEnd();

glBegin(GL_LINES);
  glcolor3f(0.9,0.9,0.6);
  glVertex2f(-0.2,-0.2);
  glcolor3f(0.9,0.9,0.6);
  glVertex2f(0.1,0);
  glcolor3f(0.4,0.9,0.9);
  glVertex2f(0.2,-0.2);
  glcolor3f(0.2,0.5,0.9);
  glVertex2f(-0.1,0);
  glcolor3f(0.9,0.9,0.6);
  glVertex2f(0,0.2);
  glcolor3f(0.9,0.5,0.9);
  glVertex2f(0,-0.2);
glEnd();

glLineWidth(2);
glEnable(Gl_LINE_SMOOTH);
glBegin(GL_LINE_LOOP);
 for j:=0 to 256 do
    begin
    glColor3f(random,random,random);
    glVertex2f(0.12*sin(2*PI*(j/256)),-0.06-0.13*cos(2*PI*(j/256)));
    end;
glEnd();

glDisable(GL_LINE_SMOOTH);
glFlush();
SwapBuffers(Canvas.Handle);
wglMakeCurrent(0,0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle);
hrc:=wglCreateContext(Canvas.Handle);
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
refresh;
end;

end.
tiger вне форума Ответить с цитированием
Старый 22.12.2009, 19:16   #2
tiger
Пользователь
 
Регистрация: 30.03.2008
Сообщений: 52
По умолчанию

неужели никто не знает?
tiger вне форума Ответить с цитированием
Старый 24.01.2010, 08:02   #3
Krechet
Пользователь
 
Аватар для Krechet
 
Регистрация: 03.12.2008
Сообщений: 76
По умолчанию

При вращении ты вращаешь саму систему координат, к которой жестко привязаны точки фигур. Подумай сам, как исправить.
При установке Линукс не пострадало ни одного пингвина... Зато пострадало много дятлов..
Krechet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите найти ошибку DelMaker JavaScript, Ajax 2 19.05.2009 18:27
Помогите найти ошибку (С++) Alex1991 Помощь студентам 1 11.04.2009 15:19
Помогите найти ошибку lubafffka Паскаль, Turbo Pascal, PascalABC.NET 1 18.12.2008 09:42
помогите найти ошибку rUs_LAN Microsoft Office Excel 5 19.11.2008 20:15
help!!! Помогите найти ошибку!!! linker13 Общие вопросы Delphi 2 07.07.2007 23:15