[Aporte] DX8 - Texturas sin ^2

Estado
Cerrado para nuevas respuestas.

Dunkan

Veterano
Para los que utilicen el DX8 de Mannakia y no quieran pasar los gráficos ^2 y quieran ganar unos fps...

Reemplazen este sub:
Código:
Public Sub Geometry_Create_Box(ByRef verts() As TLVERTEX, ByRef dest As RECT, ByRef src As RECT, ByRef rgb_list() As Long, _
                                Optional ByRef Textures_Width As Long, Optional ByRef Textures_Height As Long, Optional ByVal angle As Single)
'**************************************************************
'Author: Aaron Perkins
'Modified by Juan Martín Sotuyo Dodero
'Last Modify Date: 11/17/2002
'
' * v1      * v3
' |\        |
' |  \      |
' |    \    |
' |      \  |
' |        \|
' * v0      * v2
'**************************************************************
    Dim x_center As Single
    Dim y_center As Single
    Dim radius As Single
    Dim x_Cor As Single
    Dim y_Cor As Single
    Dim left_point As Single
    Dim right_point As Single
    Dim temp As Single
    
    If angle > 0 Then
        'Center coordinates on screen of the square
        x_center = dest.Left + (dest.Right - dest.Left) / 2
        y_center = dest.Top + (dest.bottom - dest.Top) / 2
        
        'Calculate radius
        radius = Sqr((dest.Right - x_center) ^ 2 + (dest.bottom - y_center) ^ 2)
        
        'Calculate left and right points
        temp = (dest.Right - x_center) / radius
        right_point = Atn(temp / Sqr(-temp * temp + 1))
        left_point = 3.1459 - right_point
    End If
    
    'Calculate screen coordinates of sprite, and only rotate if necessary
    If angle = 0 Then
        x_Cor = dest.Left
        y_Cor = dest.bottom
    Else
        x_Cor = x_center + Cos(-left_point - angle) * radius
        y_Cor = y_center - Sin(-left_point - angle) * radius
    End If
    
    
    '0 - Bottom left vertex
    If Textures_Width Or Textures_Height Then
        verts(2) = Geometry_Create_TLVertex(x_Cor, y_Cor, 0, 1, rgb_list(0), 0, src.Left / Textures_Width + 0.001, (src.bottom + 1) / Textures_Height)
    Else
        verts(2) = Geometry_Create_TLVertex(x_Cor, y_Cor, 0, 1, rgb_list(0), 0, 0, 0)
    End If
    'Calculate screen coordinates of sprite, and only rotate if necessary
    If angle = 0 Then
        x_Cor = dest.Left
        y_Cor = dest.Top
    Else
        x_Cor = x_center + Cos(left_point - angle) * radius
        y_Cor = y_center - Sin(left_point - angle) * radius
    End If
    
    
    '1 - Top left vertex
    If Textures_Width Or Textures_Height Then
        verts(0) = Geometry_Create_TLVertex(x_Cor, y_Cor, 0, 1, rgb_list(1), 0, src.Left / Textures_Width + 0.001, src.Top / Textures_Height + 0.001)
    Else
        verts(0) = Geometry_Create_TLVertex(x_Cor, y_Cor, 0, 1, rgb_list(1), 0, 0, 1)
    End If
    'Calculate screen coordinates of sprite, and only rotate if necessary
    If angle = 0 Then
        x_Cor = dest.Right
        y_Cor = dest.bottom
    Else
        x_Cor = x_center + Cos(-right_point - angle) * radius
        y_Cor = y_center - Sin(-right_point - angle) * radius
    End If
    
    
    '2 - Bottom right vertex
    If Textures_Width Or Textures_Height Then
        verts(3) = Geometry_Create_TLVertex(x_Cor, y_Cor, 0, 1, rgb_list(2), 0, (src.Right + 1) / Textures_Width, (src.bottom + 1) / Textures_Height)
    Else
        verts(3) = Geometry_Create_TLVertex(x_Cor, y_Cor, 0, 1, rgb_list(2), 0, 1, 0)
    End If
    'Calculate screen coordinates of sprite, and only rotate if necessary
    If angle = 0 Then
        x_Cor = dest.Right
        y_Cor = dest.Top
    Else
        x_Cor = x_center + Cos(right_point - angle) * radius
        y_Cor = y_center - Sin(right_point - angle) * radius
    End If
    
    
    '3 - Top right vertex
    If Textures_Width Or Textures_Height Then
        verts(1) = Geometry_Create_TLVertex(x_Cor, y_Cor, 0, 1, rgb_list(3), 0, (src.Right + 1) / Textures_Width, src.Top / Textures_Height + 0.001)
    Else
        verts(1) = Geometry_Create_TLVertex(x_Cor, y_Cor, 0, 1, rgb_list(3), 0, 1, 1)
    End If
 
End Sub
Un saludo !
 

Dunkan

Veterano
Sí .. es mas que nada para que ganen unos 50 fps's y no tengan que pasar los graficos a ^2 xD
 

Benja.-

Club Atlético Independiente
Lo probe en 11.5 y anda bien, y me tira muchos mas fps.
Ta muy bueno Dunkan.

Saludos
 

Dunkan

Veterano
No se dan una idea la cantidad de cosas como esta que se pueden hacer jajaja, y sí tendría que funcionar u.u
 

Franeg95

CARP
Ex-Staff
Excelente!

Recuerdo que mannakia habia puesto otra forma pero era convirtiendolos en memoria a ^2.

Buen aporte!
 

Dr. GoDKeR

El Rey y el As
Miembro del equipo
Administrador
Developer
Moderador de RRPP
Moderador de AO
Moderador de Tecnología
Moderador de Entretenimiento
Moderador de Diseño
Especialista de RRPP
Especialista de Entretenimiento
Especialista de Tecnología
Especialista de Argentum
Especialista de Diseño
esto no es como el de mannakia no?

me refiero al tema de memoria

EDIT: lo implemente y anduvo ^^

pero lo unico es q no tuve cambios en los fps :p (11.5 Dx8)
 

0xDEADBEEF

Vicinity of obscenity
Ex-Staff
Fantastico, te digo lo mismo, yo lo tengo hecho para opengl, pero es diferente, utilizo un sistema "similar" al que posteó mannakia, por eso este me pareció que no funcionaria.. pero veo que si :) asi que felicitaciones!

En que te basaste para hacerlo? :p
 

[K]alamar

Proyectando Ideas
Yo tengo uno que lo que hace es modificar el gráfico a la forma que lo hace en ^2, solo cuando los carga, automáticamente, así funciona este ¿Cierto?...

Muy bueno Dunkan.

Suerte!...
 

Dr. GoDKeR

El Rey y el As
Miembro del equipo
Administrador
Developer
Moderador de RRPP
Moderador de AO
Moderador de Tecnología
Moderador de Entretenimiento
Moderador de Diseño
Especialista de RRPP
Especialista de Entretenimiento
Especialista de Tecnología
Especialista de Argentum
Especialista de Diseño
Mannakia dijo:
Dejense de joder y no jodan a la pobre CPU , que la RAM esta para eso
obio, pero no todas las makinas tienen 1 o 2 Gb de ram, hay algunas foreveraloneras de 128 muy viejas jaja

mete un ao con eso + el Ares y cagaste xD
 

0xDEADBEEF

Vicinity of obscenity
Ex-Staff
[K]alamar dijo:
Yo tengo uno que lo que hace es modificar el gráfico a la forma que lo hace en ^2, solo cuando los carga, automáticamente, así funciona este ¿Cierto?...

Muy bueno Dunkan.

Suerte!...
Si, yo tengo ese mismo sistema, no se cual será más rapido, pero el mio funciona bastante bien :)
 

Mannakia

Programador
Ex-Staff
Parra el que vos tenes es la mejor forma de hacerlo, le das una mañana al direct/ogl y te ahorras procesamiento extra, esta forma lo deja regulando al CPU :S
 
Estado
Cerrado para nuevas respuestas.
Arriba