Кривоус Анатолий писал(а):Я вызвал перед CopyMemory
Так тоже работает, я проверил.
Модератор: Mikle
Кривоус Анатолий писал(а):Я вызвал перед CopyMemory
Mikle писал(а):Так тоже работает, я проверил.
- Каталог из которого загружалось приложение.
- Системный каталог. Используйте функцию GetSystemDirectory, чтобы получить путь к этому каталогу.
- 16-разрядный системный каталог. Функции, которая получает путь к этому каталогу нет, но он ищется.
Windows Me/98/95: Этот каталог не существует.- Каталог Windows. Используйте функцию GetWindowsDirectory, чтобы получить путь к этому каталогу.
- Текущий каталог.
- Каталоги, которые внесены в список в переменной окружения PATH.
Кривоус Анатолий писал(а):Проблему выявил, нужно кроме смены каталога сменять диск ChDrive
Mikle писал(а):Вот, ИМХО, неправильно себя ведёт этот контрол от мелкософта.
PilatP писал(а):на сколько я понял нужно доработать, так как в рендере он работает лиш с одной текстурой, а если в модель используется более 1 текстуры, то проблема.
PilatP писал(а):Я так понял, что разобрались, в чем же была причина с OpenFileDialog?
PilatP писал(а):ты не смотрел еще тот исходник с тенями?
PilatP писал(а):хотелось бы продолжить с шейдерами(ландшафт на 8-12 текстур, в том же формате по 2(4) текстуры
Mikle писал(а): Но не путай количество текстур с количеством текстурных координат.
Mikle писал(а):Да, просто контрол менял текущую папку ещё до того, как dll будет найдена.
Mikle писал(а):Мне всегда проще написать что-то своё, чем вникать в чужую логику.
Mikle писал(а):Давай так - ты определишься с ПОЛНЫМ набором текстур и размером ландшафта, дальше будем выбирать способ.
PilatP писал(а):например взять дерево, в нем как минимум 2 текстуры, и как быть? На сколько я понял, нужно сохранять по сабам, и к каждому, текстуру.
PilatP писал(а):и как же решить эту проблему?
ChDrive App.Path
ChDir App.Path
PilatP писал(а):надеюсь напишеш для врапера
PilatP писал(а):по поводу текстуры дорога, интересно если дорога не по прямой, а на диагональ, то как будет?
Mikle писал(а):А как ты собираешься решать проблему краёв ландшафта?
Mikle писал(а): Вот на твоих картинках с танками тени от деревьев явно статичные
Mikle писал(а):Конечно, и по быстродействию это будет лучше, если только не будет несколько тысяч деревьев. А если будет - тут уже лучше группировать стволы целой рощи в один меш, кроны в другой, делать LODы.
Mikle писал(а): Можно искуственно ограничить видимость туманом и показывать фрагмент не более, чем 256*256, тогда размер, в принципе, может быть любым,
Mikle писал(а):Он показывает, что не годится подход, ни тот, что в моём примере на 5 текстур, ни в примере на 16 текстур с Volume Texture.
PilatP писал(а):Кстати туман, в обычном режиме, идет по радиусу, а в танках, сделано по контуру карты, я думаю что там использовали текстуру.
PilatP писал(а):и все же я думаю что лучше использовать 16 текстур с Volume Texture.
PilatP писал(а):Дорогу можно, и так рисовать, а асфальтную, можно рисовать отдельно полигонами, это решит много других проблем, да в реализации проще.
Mikle писал(а):Сделать два тумана - привязать к SizeOfFrame, плюс по краю, это не проблема, и текстура не нужна для этого.
PilatP писал(а):То есть тебя устраивает, что между текстурами №1 и №3 неполучится сделать перехода? Обязательно появится полоса текстуры №2.
PilatP писал(а):Для асфальтовой дороги уже нужна реализация, готовая модель, на что я буду писать шейдер?
PilatP писал(а):в 1 очередь нужны меши.
Mikle писал(а):Обрати внимание - в конвертере меш сохраняется в формате vvFormat, без текстурных координат. Я же дал пример, которым я делал меш для машины, там нет текстур.
А vFormat в просмотрщике уже содержит текстурные координаты.
Public Type vvFormat
Pos As D3DVECTOR
Norm As D3DVECTOR
tu As Single
tv As Single
End Type
For n = 0 To SSCnt - 1
For i = 0 To AT(n).FaceCount * 3 - 1
cI = Ind(AT(n).FaceStart * 3 + i)
If Used(cI) < 0 Then
VV(cV).Pos = Vert(cI).Pos
VV(cV).Norm = Vert(cI).Norm
VV(cV).tu = Vert(cI).tu
VV(cV).tv = Vert(cI).tv
Used(cI) = cV
II(cInd) = cV
cV = cV + 1
Else
II(cInd) = Used(cI)
End If
cInd = cInd + 1
Next i
Next n
'Open fPath & fName & ".mesh" For Binary As #nf
Open "D:\Work\3D\Camera\Data\w2.mesh" For Binary As #nf
Mikle писал(а): Может модель маленькая, или большая, или расположена где-то выше-ниже?
PilatP писал(а):модель автомат какого размера?
MinX = 1000000: MaxX = -1000000
MinY = 1000000: MaxY = -1000000
MinZ = 1000000: MaxZ = -1000000
For n = 0 To MeshVertCount - 1
If MinX > Vert(n).Pos.X Then MinX = Vert(n).Pos.X
If MaxX < Vert(n).Pos.X Then MaxX = Vert(n).Pos.X
If MinY > Vert(n).Pos.Y Then MinY = Vert(n).Pos.Y
If MaxY < Vert(n).Pos.Y Then MaxY = Vert(n).Pos.Y
If MinZ > Vert(n).Pos.Z Then MinZ = Vert(n).Pos.Z
If MaxZ < Vert(n).Pos.Z Then MaxZ = Vert(n).Pos.Z
Next n
Mikle писал(а):Не помню, посмотри, это ведь не трудно, как это в конвертере проверяется:
CamPos = Vec3(0, 0, -5)
PilatP писал(а):У тебя камера расположена в центре, и модель тоже, поставь, к примеру, в CtrlInit так:
Put #nf
Option Explicit
Private Type ConVFormat
Pos As D3DVECTOR
RHW As Single
tu As Single
tv As Single
End Type
Dim Vert(3) As ConVFormat
Dim vSize As Long
Private Const ConFVF = D3DFVF_XYZRHW Or D3DFVF_TEX1
Public Sub Draw(TeksturID As Integer, PosX As Single, PosY As Single, RazmX As Single, RazmY As Single, Optional PosZ As Single = 0.5, Optional tuTex As Single = 1, Optional tvTex As Single = 1, Optional Alfa As Single = 1)
'Dev.SetVertexShader Nothing
'Dev.SetPixelShader Nothing
'Dev.SetRenderState D3DRS_CULLMODE, D3DCULL_CCW
'Dev.SetRenderState D3DRS_ZENABLE, D3DZB_FALSE
'Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_TRUE
'Dev.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR
'Dev.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR
Dev.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE
Dev.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
Dev.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE
Dev.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_DISABLE
Dev.SetFVF ConFVF
Vert(0).Pos = Vec3(PosX, PosY, PosZ)
Vert(0).tu = 0: Vert(0).tv = 0 ': Vert(0).RHW = Alfa ': Vert(0).RHW = Color.
Vert(1).Pos = Vec3(PosX + RazmX, PosY, PosZ)
Vert(1).tu = tuTex: Vert(1).tv = 0 ': Vert(1).RHW = Alfa
Vert(2).Pos = Vec3(PosX, PosY + RazmY, PosZ)
Vert(2).tu = 0: Vert(2).tv = tvTex ': Vert(2).RHW = Alfa
Vert(3).Pos = Vec3(PosX + RazmX, PosY + RazmY, PosZ)
Vert(3).tu = tuTex: Vert(3).tv = tvTex ': Vert(3).RHW = Alfa
Dev.SetTexture 0, Tekstura(TeksturID).Textures
Dev.DrawPrimitiveUp D3DPT_TRIANGLESTRIP, 2, VarPtr(Vert(0)), Len(Vert(0))
Dev.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_FALSE
End Sub
Public Sub Draw3D(TeksturID As Integer, PosX As Single, PosY As Single, PosZ As Single, RazmX As Single, RazmY As Single, Optional tuTex As Single = 1, Optional tvTex As Single = 1, Optional Alfa As Single = 1)
Dim Mtrx As D3DMATRIX
MatrixMultiply Mtrx, mView, mProj
MatrixTranspose Mtrx, Mtrx
Dev.SetVertexShader Nothing
Dev.SetPixelShader Nothing
Dev.SetRenderState D3DRS_CULLMODE, D3DCULL_CCW
Dev.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
'Dev.SetRenderState D3DRS_ZENABLE, D3DZB_FALSE
'Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_TRUE
'Dev.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR
'Dev.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR
Dev.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE
Dev.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1
Dev.SetTextureStageState 0, D3DTSS_COLORARG1, D3DTA_TEXTURE
Dev.SetTextureStageState 1, D3DTSS_COLOROP, D3DTOP_DISABLE
Dev.SetFVF ConFVF
Vert(0).Pos = Vec3(PosX, PosY, PosZ)
Vert(0).tu = 0: Vert(0).tv = 0 ': Vert(0).RHW = Alfa ': Vert(0).RHW = Color.
Vert(1).Pos = Vec3(PosX + RazmX, PosY, PosZ)
Vert(1).tu = tuTex: Vert(1).tv = 0 ': Vert(1).RHW = Alfa
Vert(2).Pos = Vec3(PosX, PosY, PosZ + RazmY)
Vert(2).tu = 0: Vert(2).tv = tvTex ': Vert(2).RHW = Alfa
Vert(3).Pos = Vec3(PosX + RazmX, PosY, PosZ + RazmY)
Vert(3).tu = tuTex: Vert(3).tv = tvTex ': Vert(3).RHW = Alfa
Dev.SetTexture 0, Tekstura(TeksturID).Textures
Dev.DrawPrimitiveUp D3DPT_TRIANGLESTRIP, 2, VarPtr(Vert(0)), Len(Vert(0))
'Dev.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
Dev.SetRenderState D3DRS_ALPHABLENDENABLE, D3D_FALSE
End Sub
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0