-
Доброго времени суток. У меня следующий вопрос.
procedure drawbg(draw:string); var n,i:integer; cursorpos : tpoint; begin getcursorpos(cursorpos);
if draw='tex' then begin for n:=0 to mapobjectnumber-1 do model[n].draw; end;
if draw='color' then begin for n:=0 to mapobjectnumber-1 do model[n].drawcoloured(n,n,n); BitBlt(colormap.Canvas.Handle, 0, 0, 32, 32, wglGetCurrentDC, cursorpos.x , cursorpos.y, SRCCOPY)=true then exit; end;
end;
В первом условии объекты рисуются с текстурами, во втором - цветом. По отдельности они работают отлично. Но если я сначала рисую в цвете, а потом с текстурой - в colormap оказывается изображение с текстурой..кто в курсе, почему так?
-
Упс, виноват. Там ifBitBlt(colormap.Canvas.Handle... Не скопировалось почему-то.
-
> [0] evil_mike (15.07.08 14:25)
> , SRCCOPY
> Но если я сначала рисую в цвете, а потом с текстурой - в > colormap оказывается изображение с текстурой..кто в курсе, > почему так?
Потому что потом с текстурой.
Давай соберись и "спроси вопрос" :) А если решаешься код(кусок) показывать, то показывай весь(кусок), а не в торопях набранный тут на форуме...
-
{RASkov} Не понимаю..в основном цикле у меня идет drawbg('color'); drawbg('tex'); А колормап заполнятеся ТОЛЬКО в drawbg('color'); , так каким образом он может потом снова перерисоваться?
-
А какой смысл в сравнении BitBlt c true? Он просто возвращает ненулевое значение при успешной отрисовке. А я еще не видел случая, чтобы отрисовка бала не успешной ))
И в том месте, где у тебя > if draw='tex' then > там нет BitBlt. Может поэтому для tex не отрисовывается?)
-
Вообще, конечно, я ничерта не понял ни в коде, ни в задаче )
-
Опишу без кода. Есть два варианта отрисовки. Первая - с текстурами в текущем контексте. Вторая - цветом (без текстур) в текущем контексте + она копируется на канвас битмапа. Так вот, если в основном цикле я сначала рисую в цвете, а потом с текестурами - то на канвасе оказывается картинка с текстурами. Вопрос: как это может быть, если отрисовка с текстурами и БитБлт вообще нигде не связаны?
-
> [0] evil_mike (15.07.08 14:25) > [3] evil_mike (15.07.08 20:13)
Мммда. Судя по п0стам, трава была что надо %) Попробую включить телепатор:
итак, ты воспроизводишь на некоем DC 3D-графику. С помощью OpenGL. А потом куда-то коприуешь нарисованное в зависимости от положения курсора. Вопрос - куда и зачем? Озвучь задачу.
++ по сабжу: > Но если я сначала рисую в цвете, а потом с текстурой - в > colormap оказывается изображение с текстурой..кто в курсе, > почему так?
Именно потому что ты сначала рисуешь некий многоугольник цветом, а потом на этом же месте перерисовываешь его же, но только текстурированным. Вот он у тебя и затирает то что было нарисовано ранее.
пшшш..... всё, телепатор сгорел =)
-
упс, опоздал. Что ж, при такой постановке вопроса картина меняется. Очевидно, что проблема - не в коде, что ты привёл. (И, кстати, было бы неплохо передавать параметр не строкой, а числом - так намного быстрее, плюс к тому проверка на верный вызов BitBLT не нужна совсем - так или иначе будет выполнен выход из процедуры)
-
Проблема может быть, скажем, в том, что либо не втом месте очищается буфер цвета/глубины/вырезки. Или в том, что drawcoloured воще ничего не отрисовывает. Или в том, что эта процедура работает аналогично draw с текстурами. Так или иначе - нужен код.
-
Не, вы все прикалываетесь что ли? Еще раз........
У меня есть девайс контекст. Там я рисую примитивы. Я могу, используя процедуру drawbg(draw : string) отрисовать их ДВУМЯ способами. 1. ТОЛЬКО цветом. В этом случае часть изображения также копируется на канвас битпама. 2. ТОЛЬКО с текстурой, в этом случае на канвас битмапа НИЧЕГО НЕ КОПИРУЕТСЯ.
Далее, в процессе рендера я 1. Отрисовываю примитивы цветом в зависимости от их номера по порядку. Копирую в битмап, откуда они и будут далее браться 2. Отрисовываю примитивы с текстурами, чтоб визуально было красивее.
Проблема : после этих процедур, на канвасе битмапа оказывается не рисунок с примитивами ЦВЕТОМ, а рисунок с ЗАТЕКСТУРИРОВАННЫМИ примитивами. Еще раз повторю, что если примитивы рисуются с текстурами, то канвас битмапа НЕ УЧАСТВУЕТ!
Все, лучше объяснить уже не получится.
-
> По отдельности они работают отлично.
То есть если я только рисую в цвете и не рисую с текстурами - получается правильный канвас без текстур..
-
Я не прикалываюсь. Я правда пытаюсь помочь... А что копируется, если рисование текстурированных примитивов вообще отключить? Отсюда, возможны 2 варианта:
1) На канвас попадает та картинка, что ожидалась: Значит, в каком-то месте отрисовка "цветом" забивается "текстурной", скажем, незамеченным вызовом где-либо изначального draw, ну мало ли бывает опечаток или недосмотров.
2) На канвас упрямо копируются текстурированные примитивы: Ошибка в самой drawcoloured. Берём отладчик и шерстим на предмет вызовов glEnable(GL_TEXTURE), glTexImage2D() и иже с ними.
-
чёрт. пора мне на топчан. всё не успеваю никак =(
Короче, значит в draw не отключается текстурирование. glDisable(GL_TEXTURE_2D) - в начало coloured должно помочь.
-
Если рисовать только цветом, то на канвасе все будет правильно. В этом-то и проблема, я все проверил через поиск - нигде больше лишних вызовов нету..
-
Не помогло..
-
Тогда - код в студию. Ибо то, что творится в недрах самой drawcoloured, сокрыто от моего мысленного взора))
-
procedure TModel.DrawColoured(RCol, GCol, BCol: byte); var I:Integer; begin for I:=0 to ObjectCount-1 do if Objects[I].Visible then Objects[I].DrawColoured(RCol, GCol, BCol); end;
... procedure T3DObject.DrawColoured(RCol, GCol, BCol: byte); var F, iVertex, PointIndex:Integer; begin FTransformList.Push; glPushName(FObjectIndex); glBegin(FRMode); for F:=0 to FaceCount-1 do for iVertex:=0 to 2 do begin PointIndex:=Faces[F].VertIndex[iVertex]; glColor3ub (RCol, GCol, BCol); glVertex3f(Verts[PointIndex].X, Verts[PointIndex].Y, Verts[PointIndex].Z); end; glEnd; glPopName; FTransformList.Pop; end;
-
Я, кажется, начинаю понимать, в чём петрушка! Дело в том, что при отрисовке в буфер выборки, буфер цвета со времени последнего кадра НЕ обновляется - в него просто не рисуется ничего (по Краснову)!
-
Так я же сначала рисую в цвете..а когда рисуется текстурами - уже неважно, есть там цвет или нет..или я чего-то не понимаю?
|