Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Координаты мыши, OpenGL 
:(
    Опции темы
MacTep
  Дата 2.3.2005, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Привет всем! Как узнать, в OpenGL, что координаты курсора мыши в момент нажатия левой кнопки находятся в пределах нарисованной на экране сферы? Сферу рисую при помощи gluQuadric.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
MacTep
Дата 2.3.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Небольшое дополнение: нужно узнать по щелчку левой кнопки мыши координаты текстуры, наложенной на эту самую сферу.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
PHARAOH
Дата 2.3.2005, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А если разложить по полочкам!

При нажатии левой кнопки мыши ты получаешь х и у, а по z ты собственно должен провести прямую до поверхности сферы!

т.е. если будешь рисовать сферу не через GluSphere, а через загрузку из файла - набора треугольников и вершин, то в принципе можно определить треугольник на который ты тыцнул мышой (Хцентра объекта -Х мыши, ...,Z:=вектор(Хцентра объекта, Хцентра объекта -Х мыши,...)) помоему так!


PM MAIL   Вверх
PHARAOH
Дата 2.3.2005, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На сайте http://delphigfx.mastak.ru/ есть пример экспорта объекта с текстурой из 3dmax. (примерчик и плаг немного глючные, но...)
Там расписана текстура по треугольникам. А если у тебя будут координаты треугольника на который ты тыцнул, то координаты текстуры наложеной на этот треугольник я думаю ты вычислить сможешь!

Попробуй так может получится чаво!
PM MAIL   Вверх
PHARAOH
Дата 2.3.2005, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все что я написал выше фигня.

Только что зашел http://delphigfx.mastak.ru/3d/001/3d_1.htm там есть очень прикольный пример:

Пример 1
Закрашиваем полигоны

....
point:TVertex;
....
begin
// Получаем выбранный полигон при нажатии на панель Panel1
mouse.FindVertex(x,panel1.height-y,Scene,point);
for i:=1 to numFound do // Для всех полигонов найденных по Mouse.FindVertex
begin
poly:=VertexHits[i] shr 16;
vert:=VertexHits[i] mod 65536;
If (poly "<" Dolphin.Faces.count) and
(vert"<"Tface(Dolphin.Faces.Items[poly]).Vertices.count) then
begin
// получаем составляющие цвета из ColorActual (TColor)
ir:=(ColorActual) mod 256; // R
ig:=(ColorActual shr 8) mod 256; // G
ib:=(ColorActual shr 16) mod 256; // B
Tvertex(Tface(Dolphin.Faces.Items[poly].
Vertices.items[vert]).point.setcolor(ir,ig,ib);
end;
end;
end;

PM MAIL   Вверх
MacTep
Дата 5.3.2005, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



PHARAOH, что-то я не догнал про полигоны. Можно чуть подробнее о сфере или на ее примере?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
PHARAOH
Дата 14.3.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сам попробовоать еще не успел но очень интересный код:

GlFeedBackBuffer(tamBuffer,GL_2D,@buffer);// tamBuffer - размер буфера, в исходном варианте буфер был 8000 of GLFloat

GlRenderMode(GL_feedBack);
size:=GlRenderMode(GL_render);
{now that we got the 2D coordinates of each vertex, find which vertex is near}
i:=0;
try
while i<size do
begin
If buffer[i]=GL_Pass_Through_token then {the G.P.T.T. is a marker to divide the buffer in sections}
If buffer[i+1]=Entity.id then {this is the entity we are dealing with}
begin
inc(i,2);
// continue cicling until we find another Object marker:
while (buffer[i]=GL_Pass_Through_token) do
begin
ActualVertex:=round(Buffer[i+1]);
If buffer[i+2]=GL_Polygon_Token then {this is a polygon, letґs check it out}
begin
count:=trunc(buffer[i+3]);
inc(i,4);
for j:=0 to count-1 do {letґs take a look at each vertex of this polygon}
begin
nx:=round(buffer[i]); {x coordinate of a vertex}
ny:=round(buffer[i+1]); {y coordinate of a vertex}
If (nx+radio>x) and (nx-radio<x) {radio - радиус поиска}
and (ny+radio>y) and (ny-radio<y) and (NumFound<MaxHits) then
begin
inc(numFound);
VertexHits[numFound]:=ActualVertex+j;
end;
inc(i,2); {x and y}
end;
end
else
inc(i,2);
end;
end;
inc(i);
end;
except
end;


код выцарапан из юнита (для тыцанья мышей по объекту)
поэтому сори если где-то непонятные буки
но наскоко я понял самое важное в первых трех строках smile
Добавлено @ 13:48
А насчет сфера, не сфера - (I)gnore ..., Пoфиг ... smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




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


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

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