Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

3D Движок в Дельфи

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> 3D Движок в Дельфи
Имя
Сообщение << Старые топики   Новые топики >>
3D Движок в Дельфи - 2005-11-22 17:25:53   
MeGaNeO

Сообщений: 2
Оценки: 0
Присоединился: 2005-11-22 17:12:03
Собрался сделать графический движок в Дельфи на Open GL''е зашел за советом, решением подсказкой. Поделитесь опытом , кто имел дело с 3Д графикой.[sm=zhabbba.gif]
Post #: 1
3D Движок в Дельфи - 2005-11-23 11:11:25   
Pupkin-Zade

Сообщений: 9398
Оценки: 1489
Присоединился: 2004-03-10 13:54:16
У нас был цикл статей по написанию собственного 3D движка - ищите
Post #: 2
3D Движок в Дельфи - 2005-11-24 04:05:41   
-ddd-

Сообщений: 4918
Оценки: 42
Присоединился: 2005-05-23 17:20:41
Для начала создадим пару классов для дальнейшей работЫ.<BR>3D объект.

unit gl_max;

interface

uses
windоws, Messages, Classes, Graphics, Forms, ExtCtrls, Controls, Dialogs, SysUtils, OpenGL;


type

gl_color=array[1..3]of glfloat;

gl_Rotate=array[1..3]of glfloat;

text_cor=record
x,y:glfloat; ///нормаль (вектор)
end;

normal=record
x,y,z:glfloat; ///нормаль (вектор)
znak:boolean; ///знак нормали
end;

sl_point=^tpoint;
tpoint=record
x,y,z:integer;
texture:text_cor;
smooh_nrml:normal;
n:integer; ///координатЫ и номер
select:boolean; ///вЫделение точки
color:gl_color; ///цвет вершинЫ
next:sl_point; ///сл. точка в списке
end;

tpoint_fl=record
x,y,z:glfloat;
end;

sl_poly=^tpoly;
tpoly=record
vr:array[1..3]of sl_point; ///СсЫлки на точки в списке
nrml:normal; ///каждЫй полигон имеет свою нормаль
gl_p_color:boolean; ///цвет полигона или по верширнам
color:gl_color; ///цвет полигона
next:sl_poly; ///ссЫлка на сл. полигон
end;

sl_obj=^tGL_оЬjесt3D;

tGL_оЬjесt3D = class

obj_set:record
texture,smooth,
color_m,light:boolean;
draw_mode:glenum;
end;

angcn,angfr:array[1..3]of glfloat;
next:sl_obj;
x,y,z:integer;
select:boolean;
smooth:boolean;
private
fall_points:sl_point; ///Список точек
next_p,new_p:sl_point; ///Список точек
fall_polys,next_poly:sl_poly; ///список полигонов
sh_points:boolean;
sh_ifгаmе:boolean;

public
function put_point(x,y,z:integer):sl_point;
function put_polygon:sl_poly;
function get_selested:integer;
function get_point(x,y,z:integer):sl_point;
function get_sel_poly:sl_poly;
procedure set_text_cor(x,y:glfloat);
function get_col_points:integer;
function get_col_polys:integer;
procedure ved_diap(x,y,z,rad:glfloat);
procedure ved_poly_by_point;
function line_per(x1,y1,z1,x2,y2,z2:glfloat;var nrm:normal):tpoint_fl;
procedure reset_ss_normals;
procedure reset_sm_nrml_sel;
procedure reset_sm_nrml;
procedure filter_obj(x,y,z,rad:glfloat);
procedure sin_obj(kof:glfloat);
procedure set_s_color(r,g,b:glfloat);
procedure de_sel;
procedure invert_obj(x,y,z:boolean);
procedure clear_obj;
procedure select_all;
procedure invert_select;
procedure show_points(mode:boolean);
procedure show_ifгаmе(mode:boolean);
procedure invert_nrm;
procedure del_polygons;
procedure del_points;
procedure reset_normals; ///производит расщет всех нормалей
procedure invert_normals; ///инвертирует все нормали
procedure LoadFromFile(const FileName : String);
procedure Save_to_File(const FileName : String);
procedure Draw;
end;

Список 3D объектов, единичный объект которого будет класс tGL_о&#1068;jесt3D

tList_оЬjесts3D = class
private
fall_obj,new_obj,next_obj:sl_obj;
public
function put_obj(x,y,z:integer;filename:string):sl_obj;
function GET_obj_XY(x,y:integer):sl_obj;
function GET_obj_Xz(x,z:integer):sl_obj;
function get_col_s:integer;
function get_col:integer;
procedure sel_point_xz(x,z:integer);
procedure set_color(r,g,b:glfloat);
procedure SET_TEXT_CORD(x,y:glfloat);
procedure filter_list(x,y,z,rad:glfloat);
procedure reset_nrm_s;
procedure del_poly_obj;
procedure sdv_оЬjесt(x,y,z:integer);
procedure del_s_points;
procedure sel_point_xy(x,y:integer);
procedure put_poly_obj;
procedure save_to_file_s(filename:string);
procedure sel_all_points;
procedure select_all;
procedure inv_select;
procedure inv_smooth;
procedure set_draw_mode(mode:glenum);
procedure show_points(b:boolean);
procedure save_to_list_file(filename:string);
procedure load_from_list_file(filename:string);
procedure put_point_In_s(x,y,z:integer);
procedure sdv_points_obj(xh,yh,zh:integer);
procedure invert_оЬjесts(x,y,z:boolean);
procedure Inv_sel_points;
procedure obr_nrm_sel;
procedure draw_list;
procedure draw_list_xy(pw,ph,xsm,ysm,st:integer);
procedure draw_list_xz(pw,ph,xsm,ysm,st:integer);
procedure calk_sm_nrml;
procedure del_obj;
procedure clear;
end;

И несколько дополнительный функций:

procedure butbar3d(x1,y1,z1,x2,y2,z2:real;dr_type:glenum);
function get_Normal(p1,p2,p3:tpoint;zn:boolean):normal;
function get_Normal_fl(p1,p2,p3:tpoint_fl):normal;
function get_dl_line(x1,y1,z1,x2,y2,z2:glfloat):glfloat;
function get_S_abc(x1,y1,z1,x2,y2,z2,x3,y3,z3:integer):glfloat;
function getpoint(p1,p2,pt1,pt2,pt3:tpoint_fl;nrm:normal):tpoint_fl;
function get_angle(x,y:glfloat):glfloat;
function point_in_triangle(x1,y1,x2,y2,x3,y3,x,y:glfloat):boolean;
function PixelInOtr(x1,y1,x2,y2,x,y:glfloat):boolean;
procedure rotate_point(angle:glfloat;var x,y:glfloat);
procedure butbar3d_in(x1,y1,z1,x2,y2,z2:real;dr_type:glenum);

Теперь немного о самой форме : <BR><BR>Будем обрабатЫвать следующие:

procedure FormCreate(Sender: TоЬjесt); /// вЫбираем нужнЫй адаптер и устанавливаем нужнЫе размерЫ окна
procedure FormDestroy(Sender: TоЬjесt); ///возврощаем все что взяли
procedure FormKeyDown(Sender: TоЬjесt; var Key: Word; Shift: TShiftState); ///смотрем что зажато
procedure FormKeyUp(Sender: TоЬjесt; var Key: Word; Shift: TShiftState); ///смотрем что отпустили
procedure FormKeyPress(Sender: TоЬjесt; var Key: Char); ///смотрем что нажали

Вот вроде все:)
Post #: 3
Страниц:  [1]
Все форумы >> [Веб-программинг] >> 3D Движок в Дельфи







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.