Модератор: Mikle
Mikle писал(а):Значений "по умолчанию" там нигде нет. В примере FrameSize = 255, а единице равен ScaleSize - то есть масштаб по X и Z. Причем с вычислением ScaleSize там есть ошибка, как ее исправить указано на второй странице данной темы.
Case 0.25! To 0.75!
x1 = x - SizeOfFrame + 3&: x2 = x + 2& '***
z1 = SizeOfFrame * 2! * (0.25! - a) + z
z2 = z1 + SizeOfFrame - 1&
Case 0.75! To 1.25!
z1 = z - SizeOfFrame + 3&: z2 = z + 2& '***
x1 = SizeOfFrame * 2! * (a - 1.25!) + x
x2 = x1 + SizeOfFrame - 1&
Case 1.25! To 1.75!
x1 = x - 2&: x2 = x + SizeOfFrame - 3& '***
z1 = SizeOfFrame * 2! * (a - 1.75!) + z
z2 = z1 + SizeOfFrame - 1&
Case Else
If a > 1! Then a = a - 2!
z1 = z - 2&: z2 = z + SizeOfFrame - 3& '***
x1 = SizeOfFrame * 2! * (-0.25! - a) + x
x2 = x1 + SizeOfFrame - 1&
Майкл, ставил я по 10 и даже 20... - нифига...(кстати где-то при ста перезагрузилась система) все равно отсекает.... именно по краям... Я чуть-чуть не могу понять какие именно ты берешь углы? Если по четвертям, что чет не похоже... Если нет, то может стоит побольше значений взять? Короче не знаю, но эта штука страшно бесит, когда несешься, потом поворачиваешь а она обрубками рисует по краям......Mikle писал(а):Это на вскидку - проверить не на чем. Замена в строках, отмеченных "'***". Если мало, попробуй еще увеличить (вместо 2& и 3& будет 3& и 4& или 4& и 5&).
Yurich писал(а):Имеются ли отличия в особенностях прорисовки примитивов
D3DDevice.DrawIndexedPrimitive D3DPT_TRIANGLESTRIP
Как это не работает? Все работает.Bonesnapper писал(а):А что при использовании индексированных примитивов
матрица текстур не работает чтоли
Ну че там, Майкл, смотрел? Просто все клево пашет, кроме этой части....Mikle писал(а):Vovik
Посмотрю дома.
Select Case a
Case 0.25! To 0.75!
x1 = xx - SizeOfFrame + 3&: x2 = xx + 2&
z1 = SizeOfFrame * (1.9! * (0.25! - a) - 0.025!) + zz
z2 = z1 + SizeOfFrame - 1&
Case 0.75! To 1.25!
z1 = zz - SizeOfFrame + 3&: z2 = zz + 2&
x1 = SizeOfFrame * (1.9! * (a - 1.25!) - 0.025!) + xx
x2 = x1 + SizeOfFrame - 1&
Case 1.25! To 1.75!
x1 = xx - 2&: x2 = xx + SizeOfFrame - 3&
z1 = SizeOfFrame * (1.9! * (a - 1.75!) - 0.025!) + zz
z2 = z1 + SizeOfFrame - 1&
Case Else
If a > 1! Then a = a - 2!
z1 = zz - 2&: z2 = zz + SizeOfFrame - 3&
x1 = SizeOfFrame * (1.9! * (-0.25! - a) - 0.025!) + xx
x2 = x1 + SizeOfFrame - 1&
End Select
Public Sub Render(d3dDev As Direct3DDevice8, x As Single, z As Single, Angle As Single, Diff As Single)
Dim x1 As Long, z1 As Long, x2 As Long, z2 As Long, iz As Long, r As Single
If Diff > 0! Then r = SizeOfFrame * 0.5! Else r = SizeOfFrame * 0.5! * (1! + Diff * 0.3!)
x1 = x / ScaleXZ - Sin(Angle) * r - SizeOfFrame * 0.5!
z1 = z / ScaleXZ + Cos(Angle) * r - SizeOfFrame * 0.5!
x2 = x1 + SizeOfFrame - 1&
z2 = z1 + SizeOfFrame - 1&
If x1 < 0& Then x1 = 0&
If z1 < 0& Then z1 = 0&
If x2 >= SizeX Then x2 = SizeX - 1&
If z2 >= SizeZ Then z2 = SizeZ - 1&
numTri = (x2 - x1 + 1&) * 2&
numVertex = x2 - x1 + SizeX + 3&
d3dDev.SetVertexShader vFlag
If numTri > 0& Then
For iz = z1 To z2
d3dDev.DrawIndexedPrimitiveUP D3DPT_TRIANGLESTRIP, 0&, numVertex, numTri, iBuf(0&), D3DFMT_INDEX16, vBuf(x1, iz), SizeOfVertex
Next iz
End If
End Sub
Mikle писал(а):
- Код: Выделить всё
Public Sub Render(d3dDev As Direct3DDevice8, x As Single, z As Single, Angle As Single, Diff As Single)
Dim x1 As Long, z1 As Long, x2 As Long, z2 As Long, iz As Long, r As Single
If Diff > 0! Then r = SizeOfFrame * 0.5! Else r = SizeOfFrame * 0.5! * (1! + Diff * 0.3!)
x1 = x / ScaleXZ - Sin(Angle) * r - SizeOfFrame * 0.5!
z1 = z / ScaleXZ + Cos(Angle) * r - SizeOfFrame * 0.5!
x2 = x1 + SizeOfFrame - 1&
z2 = z1 + SizeOfFrame - 1&
If x1 < 0& Then x1 = 0&
If z1 < 0& Then z1 = 0&
If x2 >= SizeX Then x2 = SizeX - 1&
If z2 >= SizeZ Then z2 = SizeZ - 1&
numTri = (x2 - x1 + 1&) * 2&
numVertex = x2 - x1 + SizeX + 3&
d3dDev.SetVertexShader vFlag
If numTri > 0& Then
For iz = z1 To z2
d3dDev.DrawIndexedPrimitiveUP D3DPT_TRIANGLESTRIP, 0&, numVertex, numTri, iBuf(0&), D3DFMT_INDEX16, vBuf(x1, iz), SizeOfVertex
Next iz
End If
End Sub
Вот так еще лучше. В старом варианте при сильном наклоне, стоя боком на крутом склоне, часть склона, находящаяся сзади, пропадала.
В новом варианте я добавил зависимость от наклона, так что не забудьте переделать вызов (добавился новый параметр Diff). При этом получилось короче старого варианта.
Сканлайны BMP выравниваются на границу DWORD
MSDN писал(а):Each scan is a multiple of 32 bits.
1. Все заработало. Там закралась ошибка, которая и давала маленькую погрешность, выраженную в скачках...(это я делал подгон под себя) ..Mikle писал(а):1. Странно, у меня все корректно работает при изменении любых коэффициентов.
2. Проблема в считывании данных из .BMP. Я делаю ландшафтные .BMP в пятом фотошопе, сохраняю в Grayscale, 8bit, без сжатия. При размерах, кратных четырем все читается корректно.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67