forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   RPM (http://forum.boolean.name/showthread.php?t=12206)

m_512 17.03.2010 08:47

RPM
 
Подскажите, как можно реализовать такой тахометр на чистом блице?

Reks888 17.03.2010 09:04

Ответ: RPM
 
Именно такой чтобы вот так крутился?

Данил 17.03.2010 09:13

Ответ: RPM
 
ну, у меня только 1 но тупое решение - сделай анимационную картинку, и в зависимости от того, что нужно - выводи. кадров на 50-100 картинку.

Reks888 17.03.2010 09:16

Ответ: RPM
 
Некрасивый спидометр. Легче и проще сделать картинку спидометра с маской и поверх этой картинки рендерить крутящуюся стрелочку.

H@NON 17.03.2010 09:25

Ответ: RPM
 
две текстуры. Тахометр и стрелка. Менять УВ координаты по Sin Cos от угла, также крутить стрелку.

SBJoker 17.03.2010 10:24

Ответ: RPM
 
+Обрезать вьюпортом

H@NON 17.03.2010 11:34

Ответ: RPM
 
пример с текстурными координатами.
Код:

Graphics3D 800, 600, 32, 2

Local tex_tablo = CreateTexture(256,256, 16+32)
SetBuffer TextureBuffer(tex_tablo)
    ClsColor 0,0,0
    Cls
    Color 0, 255, 0
    Oval 10, 10, 236, 236, 1
SetBuffer BackBuffer()

Local mesh_tahometr = CreateQuad(2,2)
Local surf = GetSurface(mesh_tahometr, 1)
EntityTexture mesh_tahometr, tex_tablo, 0, 1

Local cam = CreateCamera()
MoveEntity cam, 0, 0, -4
CameraClsColor cam, 100,100,100

Local ANGLE
While KeyDown(1)=0
   
    ANGLE = ANGLE + KeyDown(200) - KeyDown(208)
   
    For n = 0 To CountVertices(surf)
        Select n
            ; Bottom Left
            Case 0 : VertexTexCoords surf, n, 0.25-Sin(ANGLE)*0.25, Cos(ANGLE)*0.25+0.25
            ; top left
            Case 1 : VertexTexCoords surf, n, 0.25-Sin(ANGLE)*0.25, Cos(ANGLE)*0.25+0.75
            ; top right
            Case 2 : VertexTexCoords surf, n, 0.75-Sin(ANGLE)*0.25, Cos(ANGLE)*0.25+0.75
            ; Bottom right
            Case 3 : VertexTexCoords surf, n, 0.75-Sin(ANGLE)*0.25, Cos(ANGLE)*0.25+0.25
        End Select
    Next
   
    RenderWorld()
   
    Text 10, 10, "Arrows top/bottom"
    Text 10, 30, "Angle "+ANGLE
   
    Flip
Wend

End

Function CreateQuad(XSize#=1,ZSize#=1,Brush=0)
    Local Surf
    Local Mesh=CreateMesh()
    If Brush>0 Then
        Surf=CreateSurface(Mesh,Brush)
    Else
        Surf=CreateSurface(Mesh)
    End If
    Local t=AddVertex (Surf,0,0,0,0,1)
    AddVertex (Surf,0,ZSize,0,0,0)
    AddVertex (Surf,XSize,ZSize,0,1,0)
    AddVertex (Surf,XSize,0,0,1,1)
    AddTriangle Surf,t,t+2,t+3
    AddTriangle Surf,t,t+1,t+2
    Return Mesh
End Function


m_512 17.03.2010 15:49

Ответ: RPM
 
Спасибо, буду думать.

Данил, я про это сразу подумал... но мне кажется, будет не очень плавно

Reks888, почему? ИМХО, это лучшая реализация тахометра. Выглядит стильно, хорошо видно значение, а главное занимает мало места на экране.

H@NON, большое спасибо.

З.Ы. Тахометр этот из Need for Speed 4 (версия для первой PlayStation)

ABTOMAT 17.03.2010 15:53

Ответ: RPM
 
Чё-то дергается как-то противно... Или это скрин такой упоротый? UV-координатами - самый нормальный вариант, Ханон уже опередил с ответом.

m_512 17.03.2010 16:23

Ответ: RPM
 
Вот геймплейное видео: http://www.youtube.com/watch?v=ShdQgufq1cY
На нем хорошо видно как он работает

RegIon 02.04.2010 07:37

Ответ: RPM
 
Ресуй самим блитцом, долго но красиво


Часовой пояс GMT +4, время: 03:10.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot