Forum Orbiter Italia
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.


CLICCA QUI PER SCARICARE ORBITER 2016
 
IndiceIndice  LinkLink  CercaCerca  RegistratiRegistrati  Accedi  
Accedi
Nome utente:
Password:
Connessione automatica: 
:: Ho dimenticato la password
FOI è sui social



Parole chiave
jarvis SPACE autofcs Rientro kerbal apollo 2022 IMFD d3d9 Eridanus comandi Nassp beta texture DGIV AMSO Fausto modellino tastiera OrbiterSound multiplayer tutorial ummu Shuttle Antares lander
Siti amici
AstronautiNEWS

ForumAstronautico

Orbiter Forum

Tuttovola
Ultimi argomenti attivi
» "Saturn X" concept
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Andrew Oggi alle 0:30

» Avere 2 versioni della stessa base
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Mar 28 Giu 2022 - 17:49

» Costruiranno uno spazioporto per suborbitali a Taranto?
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Francy03 Sab 18 Giu 2022 - 20:04

» Missione Minerva
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Gio 16 Giu 2022 - 23:06

» Ciao a tutti da Francy
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Gio 16 Giu 2022 - 11:59

» Orbit Hangar - nuovo indirizzo
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Lun 13 Giu 2022 - 17:46

» D3D9 - il client grafico di Jarmonik
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Gio 7 Apr 2022 - 11:01

» Ruote dei Delta Glider e Simili mezze sottoterra!
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Kappa4401 Ven 11 Mar 2022 - 20:22

» E' morto Tito Stagno
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Pete Conrad Mar 1 Feb 2022 - 20:41

» Crash di Orbiter 2016 con gli astronauti!
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Mar 4 Gen 2022 - 14:03

» Un nuovo piccolo passo per me, un grande passo per tutti!
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Kappa4401 Lun 3 Gen 2022 - 20:26

» Orbiter-radio.co.uk è offline
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Kappa4401 Lun 3 Gen 2022 - 12:31

» Grave azione da parte dei militari russi.
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Andrew Dom 12 Dic 2021 - 17:17

» Dalla terra al Docking.....su Twitch
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Mer 17 Nov 2021 - 15:02

» Mi presento - Xplane kiosk mode
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa IceCoder Sab 6 Nov 2021 - 11:01

» ciao a Tutti
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa IceCoder Sab 6 Nov 2021 - 10:57

» Scheda grafica invisibile nei setting
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Mar 2 Nov 2021 - 16:04

» Un piccolo passo per Dax82
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Mar 12 Ott 2021 - 13:17

» Guida per lo sviluppo in Orbiter con Visual Studio 2019
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Mer 6 Ott 2021 - 12:49

» Nuovo sistema di distribuzione delle versioni BETA
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Ven 10 Set 2021 - 20:25

» Orbiter diventa Open Source!
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa IceCoder Mar 7 Set 2021 - 20:05

» Antares 3.0
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Pete Conrad Gio 13 Mag 2021 - 21:24

» [WIP] Sviluppo Arrow Freighter per Orbiter2016
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Ripley Lun 15 Mar 2021 - 20:45

» Discord Server
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Atlantis Dom 14 Mar 2021 - 12:29

» Devo interrompere l’attività FOI momentaneamente causa problemi personali
[c++] Sun Tracking e Ricarica tramite pannelli EmptyDa Atlantis Dom 14 Mar 2021 - 11:16

Argomenti simili

 

 [c++] Sun Tracking e Ricarica tramite pannelli

Andare in basso 
3 partecipanti
AutoreMessaggio
simone
Add-on Developer
Add-on Developer
simone


Numero di messaggi : 1010
Età : 26
Località : Catania
Data d'iscrizione : 12.02.10

[c++] Sun Tracking e Ricarica tramite pannelli Empty
MessaggioTitolo: [c++] Sun Tracking e Ricarica tramite pannelli   [c++] Sun Tracking e Ricarica tramite pannelli EmptyDom 24 Mar 2019 - 13:48

Per la community e per Memorandum futuro posto il codice necessario a eseguire una tracciatura di un corpo in orbita (in questo caso il sole) e "guidare" un animazione verso la sua direzione, la parte di ricarica momentaneamente è ancora "rozza" in quanto tiene conto soltanto del tempo in cui i pannelli sono aperti e in modalità "tracking", in seguito se riusciro' ad implementarlo verrà gestito il tutto attraverso il parametro "InShadow" (referenza su OF QUI

Il codice come sempre è decisamente migliorabile e ancora work-in-progress ma vale la pena condividerlo sopratutto se a qualcuno interessa ricominciare a prendere la mano sullo sviluppo di Orbiter

Iniziamo:


Prima di tutto ci servirà dichiarare alcune cose nel nostro file .h

scriveremo quindi

Codice:

float batteriaprimariacalc;
OBJHANDLE VS;


Nel nostro cpp invece andremo a gestirci il resto




Codice:


void Altairsm::clbkPreStep(double simt, double simdt, double mjd)
{

//sun tracking

 VECTOR3 lspos, rspos;
        //punto di tangente su asse Y, da testare su Asse X per pannelli perpendicolari                  
 VECTOR3 lppos = { 0,0,1 };

        Identifico il mio mezzo          
 VS = oapiGetFocusObject();
 VESSEL * v = oapiGetVesselInterface(VS);

        //posizione del sole relativa al nostro mezzo e Matrice i rotazione dei pannelli
 v->GetGlobalPos(rspos);                        
 rspos = -rspos / length(rspos);                
 MATRIX3 R;                                    
 v->GetRotationMatrix(R);                    
 lspos = tmul(R, rspos);                        

 double Roll = lspos.z*DEG;        
 double Pitch = lspos.y*DEG;        
 double Yaw = lspos.x*DEG;  

         //angolo di rotazione dei pannelli      
 double SunAngle = (((acos(dotp(lspos, lppos)))*(180 / PI)));    

/*
gestione animazione secondaria solo quando la precedente è completa
In questo caso la mia animazione "ani[0]" dispiega i pannelli, secondo le SDK ci sono 3 fasi ben distinte a cui possiamo accedere senza particolare difficoltà

avremo infatti
Status=
0 quando l'animazione è ferma all'inizio (pannelli piegati)
1 quando l'animazione è in corso (pannelli in dispiegamento)
2 quando l'animazione è completa

nel mio caso la rotazione dei pannelli, per mio gusto estetico e per non creare problemi vari con la mesh parte solo quando l'animazione è completa, in tutti gli altri casi riporta le animazioni di rotazione a status 0
una volta completa invece riparte la rotazione secondo la posizione del sole

*/
 if (ani[0].status != 2)   //0 fermo 1 in corso 2 completo
 {
 SetAnimation(anim_gear, 0);
 SetAnimation(anim_gearr, 0);
 SetAnimation(anim_gears, 0);
 SetAnimation(anim_geard, 0);
 
 }
 else
 {
 // Animate Solar Panels (up)
         SetAnimation(anim_gear, ((SunAngle / 90) / 2));
    SetAnimation(anim_gearr, ((SunAngle / 90) / 2));
 SetAnimation(anim_gears, ((SunAngle / 90) / 2));
 SetAnimation(anim_geard, ((SunAngle / 90) / 2));

 };

//A questo punto dovremmo gestirci la parte di ricarica che come detto è ancora in beta

}


La ricarica dei pannelli invece avviene in modo molto "rozzo"

Codice:


if (ani[0].status == 2) {
 if (batteriaprimariacalc <= 99.9) {
 batteriaprimariacalc = loadedd + (oapiGetSimTime() / 7200); // ricarica del 0.5% ogni ora
 }
 else
 {
 batteriaprimariacalc = 100;
 // carica completa
 }
 }
 else {
 if (batteriaprimariacalc >= 0) {
 batteriaprimariacalc = loadedd - (oapiGetSimTime() / 3600); // meno 1% ogni ora
 
 
 }
 else {
 batteriaprimariacalc = 0;
 //morte capsula

 };
 
 };



il codice, com'è facilmente intuibile utilizza una semplice variabile "batteriaprimariacalc" per gestirsi la ricarica e il conseguente scaricamento (e morte della capsula una volta arrivati a 0) delle batterie in seguito andrà modificata la parte iniziale (che gestisce la ricarica) per farla funzionare soltanto quando i pannelli sono "in luce", il resto rimane invariato. è inoltre presente nel codice un sistema per scrivere e rileggere dallo scenario l'attuale valore della variabile, ma questo è facilmente reperibile all'interno delle documentazioni per sviluppare su orbiter


RISULTATO

[c++] Sun Tracking e Ricarica tramite pannelli Dockin10
Torna in alto Andare in basso
https://www.facebook.com/profile.php?cropsuccess&id=100000660
Ripley
Admin
Admin
Ripley


Numero di messaggi : 4725
Età : 58
Località : Roma
Data d'iscrizione : 12.07.10

[c++] Sun Tracking e Ricarica tramite pannelli Empty
MessaggioTitolo: Re: [c++] Sun Tracking e Ricarica tramite pannelli   [c++] Sun Tracking e Ricarica tramite pannelli EmptyGio 28 Mar 2019 - 9:23

Ottima l'idea di condividere parti di codice!

Non so se dico una caxxata, ma (tra l'altro) non si dovrebbe aggiungere del codice relativo alla quantità di energia percepita, in base alla distanza dal Sole?
Nel senso: a parità di pannelli solari (superficie, orientamento, capacità, ecc), una nave che orbita Mercurio viene raggiunta dalla stessa identica energia di una nave che orbita Plutone?

_________________________________________________
La mia pagina su Orbiter | Guida a Orbiter | Traduzioni e download | I miei add-on su OH | Video su Vimeo


Ultima modifica di Ripley il Lun 19 Ago 2019 - 9:24 - modificato 1 volta.
Torna in alto Andare in basso
http://www.tuttovola.org
fred18
Add-on Developer
Add-on Developer



Numero di messaggi : 950
Età : 39
Località : La Spezia
Data d'iscrizione : 04.01.12

[c++] Sun Tracking e Ricarica tramite pannelli Empty
MessaggioTitolo: Re: [c++] Sun Tracking e Ricarica tramite pannelli   [c++] Sun Tracking e Ricarica tramite pannelli EmptyDom 31 Mar 2019 - 20:21

Ciao,
non ho letto l'intero pezzo di codice ma mi è cascato l'occhio su una cosa che secondo me è un errore e mi permetto di farlo notare così da correggerlo. Come molti di voi sapranno non sono un programmatore professionista, ma dopo un po' di anni che studio in autonomia ho imparato qualcosa.

A quanto vedo la classe "Altairsm" è una classe derivata della classe VESSEL (oppure VESSEL2,3 o 4 a seconda di che versione usi) fornita da Martin con le Api. Infatti richiami l'overload del metodo clbkPreStep che è un metodo delle classi plugin o delle classi vessel, ma questo non mi pare un plugin per cui sono abbastanza sicuro.

Visto che è una classe derivata del vessel, tutti i metodi della classe vessel possono essere utilizzati direttamente, come ad esempio GetGlobalPos, GetRotationMatrix etc.

Perché lo faccio notare? perché l'implementazione seguente:
Codice:

  Identifico il mio mezzo         
 VS = oapiGetFocusObject();
 VESSEL * v = oapiGetVesselInterface(VS);

non ha tanto il problema di non essere necessaria (se funziona, anche se una cosa non è necessaria non importa), ma restituisce una cosa sbagliata. Mi spiego: il "Focus Object" è la nave che in quel momento ha il focus dell'utente. la nave che ha il focus la scegli premendo per esempio F3 e spostandoti sulla nave che vuoi. utilizzando il focus object in pratica tutti i dati che il modulo usa per calcolare l'angolo dei pannelli sono quelli della nave in focus e non dell'altair. In pratica se nella foto che alleghi switchi sul deltaglider vedrai i pannelli spostarsi perché i dati che usa l'altair non sono più i suoi ma quelli del dg.

Per cui il mio forte consiglio è di togliere quelle due righe e di chiamare i metodi direttamente, ma molto semplicemente ad esempio invece di
Codice:

 v->GetGlobalPos(rspos); 
mettere
Codice:

GetGlobalPos(rspos); 

tutto qui. Ciao un saluto a tutti!
Fred
Torna in alto Andare in basso
simone
Add-on Developer
Add-on Developer
simone


Numero di messaggi : 1010
Età : 26
Località : Catania
Data d'iscrizione : 12.02.10

[c++] Sun Tracking e Ricarica tramite pannelli Empty
MessaggioTitolo: Re: [c++] Sun Tracking e Ricarica tramite pannelli   [c++] Sun Tracking e Ricarica tramite pannelli EmptyLun 8 Apr 2019 - 10:56

Certo hai super ragione! in questo modo cambiando il focus viene anche cambiata erroneamente l'inclinazione dei pannelli, avendo sempre provato con il mezzo "a se stante" non ho notato la variazione nell'inclinazione ma avendo due differenti mezzi la cosa cambia e si avrebbe un errore dovuto al focus diverso e alla diversa posizione del mezzo rispetto al sole
Torna in alto Andare in basso
https://www.facebook.com/profile.php?cropsuccess&id=100000660
Contenuto sponsorizzato





[c++] Sun Tracking e Ricarica tramite pannelli Empty
MessaggioTitolo: Re: [c++] Sun Tracking e Ricarica tramite pannelli   [c++] Sun Tracking e Ricarica tramite pannelli Empty

Torna in alto Andare in basso
 
[c++] Sun Tracking e Ricarica tramite pannelli
Torna in alto 
Pagina 1 di 1
 Argomenti simili
-
» [Sviluppo] Sun Tracking
» Animazioni pannelli solari
» [Tutorial] Developer Masterclass di Martin - Come creare pannelli 2D ed MFD

Permessi in questa sezione del forum:Non puoi rispondere agli argomenti in questo forum.
Forum Orbiter Italia :: Progetti della community :: Sviluppo Add-on :: Orbiter SDK-
Vai verso: