Форум: "Игры";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
ВнизКак в GLScene сделать рамочку выделения области ? Как в Фотошопе Найти похожие ветки
← →
Кто---то © (2004-11-01 02:15) [0]или любом другом графическом редакторе. Нажимаешь мышкой на экран, отводишь её в стороу, и получается рамочка. Как такое сделать ? Проблема в том, что рамочка - она не трёхмерная, а плоская. Не должна зависить от освещения в сцене, не должна смещаться, если камеру повернуть, и всё такое. Как можно это сделать ?
← →
Колбасьев © (2004-11-01 17:35) [1]Я знаю, что на GUI это FocusRect.
На OpenGL думаю есть несколько способов (по аналогии с D3D). Наиболее простые:
1. Если есть плоский (с двумя координатами на точку) формат полигонов, то все просто, рисуем почти как на холсте.
2. Если нет, то рамку изображаем например двумя полигонами с соответствующей прозрачной текстурой (белый квадрат, и рамка шртиховая) и пытаемся разместить его перед камерой перпендикулярно линии взгляда.
А чтоб свет не влиял, надо временно отключить его.
Но может эти универсальные советы не работают в GLScene, и там надо по другому, спрайтами какиминибудь и т.д. Незнаю, неработал с ней. Я немного уровнем по ниже работаю, на D3D.
Удачи.
← →
DeadMeat © (2004-11-01 21:44) [2]Относительно GLScene могу сказать, что можно использовать любой объект, меняющий размер. Тот же TGLPlane или TGLSprite или примитивы любые... А направить его на камеру можно с помощью PointTo.
---
...Death Is Only The Begining...
← →
Кто---то © (2004-11-02 02:09) [3]
> Колбасьев © (01.11.04 17:35) [1]
> Я знаю, что на GUI это FocusRect.
> На OpenGL думаю есть несколько способов (по аналогии с D3D).
Способов много, но ни строчки кода.
> DeadMeat © (01.11.04 21:44) [2]
> Относительно GLScene могу сказать, что можно использовать
> любой объект,
А есть хотя бы один работающий пример ? Потому, что если примеров нет, то откуда же ты знаешь, что такое возможно ?
← →
Da Stranger (2004-11-02 11:17) [4]Получить точку в пространстве, имея X и Y на GlSceneviewer можно с помощью функции GLSceneViewer1юBuffer.PixelRayToWorld().
Так получаешь 4 точки и по ним рисуешь квадратик любым способом (но НЕ TglLines - они глючат. Я пока использую glDirectOpenGL и на нем с помощью gl_begin(gl_lines); ...Vertex3f(x,y,z) ... ;gl_end;).
Пример завтра выложу.
← →
Колбасьев © (2004-11-02 19:24) [5]
> Способов много, но ни строчки кода.
Да, ты прав. Но я обычно и встречаю подобнее указания, а сам код (особенно работающий пример)встречается редко. Приходиться копаться и самому искать по наводкам. Поэтому я написал лишь общие принципы, а дальше ты поискал бы сам, а ведь в GLScene не специалист :-)
← →
Колбасьев © (2004-11-02 19:25) [6]Ну вот опечатался. Читать "я ведь в GLScene не специалист :-)".
Иначе смысл исказится и я выйду грубияном :-(. И меня побъют модеры :-(
← →
Кто---то © (2004-11-03 01:51) [7]
> Da Stranger (02.11.04 11:17) [4]
> Получить точку в пространстве, имея X и Y на GlSceneviewer
> можно с помощью функции GLSceneViewer1юBuffer.PixelRayToWorld().
> Так получаешь 4 точки и по ним рисуешь квадратик любым способом
> (но НЕ TglLines - они глючат. Я пока использую glDirectOpenGL
> и на нем с помощью gl_begin(gl_lines); ...Vertex3f(x,y,z)
> ... ;gl_end;).
>
> Пример завтра выложу.
Спасибо, но ненадо. Уже сделал.
← →
DeadMeat © (2004-11-03 19:30) [8]И какже? Просто интересно... Если конечно не секрет.
---
...Death Is Only The Begining...
← →
Кто---то © (2004-11-04 01:42) [9]
> DeadMeat © (03.11.04 19:30) [8]
> И какже? Просто интересно... Если конечно не секрет.
Не секрет. Вот так вроде :
var
glc : TGLCanvas;
...
glc := TGLCanvas.Create(размер ГЛСценВьюера);
with glc do begin
// Рисуем четырёхугольник.
MoveTo(
LineTo(
LineTo(
LineTo(
LineTo(
end;
glc.Free;
Всё очень просто. Посмотри там в демках пример есть с TGLCanvas.
← →
Da Stranger (2004-11-04 10:24) [10]Так просто?!! Даже не знал, что такое можно!
Вот мой извращенческий метод:
var
xx,yy,mx,my:integer;
dx,dy:integer;
point:array[0..15] of TVector3f;
implementation
{$R *.dfm}
procedure drawline(q,w:TVector3f);
begin
glbegin(gl_lines);
glVertex3f(q[0],q[1],q[2]);
glVertex3f(w[0],w[1],w[2]);
glend;
end;
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
dx:=x;
dy:=y;
begin
point[0]:=glcamera1.Position.AsAffineVector;
point[1]:=GLSceneViewer1.Buffer.PixelRayToWorld(xx,yy);
point[2]:=GLSceneViewer1.Buffer.PixelRayToWorld(dx,dy);
point[3]:=GLSceneViewer1.Buffer.PixelRayToWorld(xx,dy);
point[4]:=GLSceneViewer1.Buffer.PixelRayToWorld(dx,yy);
end;
procedure TForm1.GLDirectOpenGL1Render(Sender: TObject;
var rci: TRenderContextInfo);
begin
//lines from camera to points
//will became visible, when you turn the camera
Drawline(point[0],point[1]);
Drawline(point[0],point[2]);
Drawline(point[0],point[3]);
Drawline(point[0],point[4]);
//A square, just like you wanted, man.
Drawline(point[1],point[3]);
Drawline(point[3],point[2]);
Drawline(point[2],point[4]);
Drawline(point[4],point[1]);
end;
procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
xx:=x;
yy:=y;
end;
← →
Кто---то © (2004-11-05 01:38) [11]
> glbegin(gl_lines);
> glVertex3f(q[0],q[1],q[2]);
> glVertex3f(w[0],w[1],w[2]);
> glend;
А по какой литературе ты изучал чистый OpenGL ? И есть ли она в сети.
Никак по этой теме ничего толкового не могу найти.
← →
Поручик © (2004-11-05 02:30) [12]Кто---то © (05.11.04 1:38) [11]
А по какой литературе ты изучал чистый OpenGL ? И есть ли она в сети.
Литература и сеть понятия несовместимые.
Если нужны основы, то Краснов подойдет (можно скачать на сайте Анатолия Подгорецкого), а если хочешь серьёзно и круто, то книга Хилла - "OpenGL для профессионалов" самое оно (правда там все на си, но API он и в Африке API).
← →
DeadMeat © (2004-11-05 12:57) [13]Кто---то © (04.11.04 01:42) [9]
А канвас вместе с другими элементами торомзить не будет?
← →
Кто---то © (2004-11-06 01:33) [14]
> Поручик © (05.11.04 02:30) [12]
> Кто---то © (05.11.04 1:38) [11]
> А по какой литературе ты изучал чистый OpenGL ? И есть ли
> она в сети.
> Литература и сеть понятия несовместимые.
> Если нужны основы, то Краснов подойдет (можно скачать на
> сайте Анатолия Подгорецкого),
Старик Подгорецкий, зачем то запихнул книгу по OpenGL в раздел Сети. Но я всё равно нашёл. Спасибо, почитаю.
> DeadMeat © (05.11.04 12:57) [13]
> Кто---то © (04.11.04 01:42) [9]
> А канвас вместе с другими элементами торомзить не будет?
А какая разница ? Выделяешь же на статичной сцене.
← →
Soroka © (2004-11-07 10:52) [15]А_можно_ли_рисуя_прямоугольник_просто_выделять_объекты_которые_попадают_в_этот_прямоугольник_?_Как_это_реализовать_?
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.043 c