Project Parallax
A Speculative Detour around the First-Person Dominance in the Extended Reality.
Such dominance can be found as a result of technological progression in the media storytelling. The concept is presented as a mechatronic system that connects to a VR headset, it enables a point of view beyond first-person in a supposedly “immersive” first-person VR headset, offering a unique interactive experience that questions and expands the current design paradigms in XR storytelling.
“Reflection is often spoken of by way of the metaphor of seeing one’s image in the mirror. In the mirror, one sees one’s own face from the perspective of the other. But in today’s context, photography must also be taken into consideration. Compare the two. Although the mirror image can be identified with the perspective of the other, there is still certain complicity with regard to one’s own viewpoint. After all, people can see their own image in the mirror as they like, while the photograph looks relentlessly “objective.” Of course, the photograph itself is an image (optical delusion) as well. What counts then is the “pronounced parallax” between the mirror image and photographic image.”
Kojin Karatani, Transcritique
Sources
Individual Project
Summer 2024
#XR #Speculative
#Wearable
#Mechatronics
Immersion and the Fourth Wall:
Towards an Immediate Reality

As in theatrical arts, the storytelling in XR, despite the technological leap, is still obsessed with immersion. The immersion is often achieved in the distance between two realities through techniques and taboos under the umbrella term “Fourth Wall”.The criticism raised with the invention of the term: the ideological effect of such a immersive distance shall be reckoned with a rather distinct perspective that draws the user into the point of view, which I named as Immediate Reality.


“The standard definition of parallax is: the apparent displacement of an object (the shift of its position against a background), caused by a change in observational position that provides a new line of sight.The philosophical twist to be added, of course, is that the observed difference is not simply “subjective,” due to the fact that the same object which exists “out there” is seen from two different stances, or points of view. It is rather that, as Hegel would have put it, subject and object are inherently “mediated,” so that an “epistemological” shift in the subject’s point of view always reflects an “ontological” shift in the object itself.”
Slavoj Žižek, Parallax View




#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>
int EN_PIN = 26;
int STP_PIN = 27;
int DIR_PIN = 28;
Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x28, &Wire);
float currentOrientationY = 0;
float filteredOrientationY = 0;
int motorPosition = 0;
int targetMotorPosition = 0;
int minSteps = -2000;
int maxSteps = 2000;
float deadband = 5.0;
int stepsPerDegree = 10;
float alpha = 0.2;
void setup(void) {
Serial.begin(115200);
if (!bno.begin()) {
Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
while (1);
}
delay(1000);
bno.setExtCrystalUse(true);
pinMode(EN_PIN, OUTPUT);
pinMode(STP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(EN_PIN, HIGH);
digitalWrite(STP_PIN, LOW);
digitalWrite(DIR_PIN, LOW);
}
void loop(void) {
imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);
currentOrientationY = euler.y();
filteredOrientationY = alpha * currentOrientationY + (1 - alpha) * filteredOrientationY;
targetMotorPosition = map(filteredOrientationY, -90, 90, minSteps, maxSteps);
int stepsToMove = targetMotorPosition - motorPosition;
if (abs(stepsToMove) > stepsPerDegree * deadband) {
if (stepsToMove > 0) {
CW(stepsToMove);
motorPosition += stepsToMove;
} else if (stepsToMove < 0) {
CCW(-stepsToMove);
motorPosition += stepsToMove;
}
} else {
digitalWrite(EN_PIN, HIGH);
}
delay(10);
}
void CW(int steps) {
digitalWrite(EN_PIN, LOW);
digitalWrite(DIR_PIN, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
for (int i = 0; i < steps; i++) {
digitalWrite(STP_PIN, HIGH);
delayMicroseconds(50);
digitalWrite(STP_PIN, LOW);
delayMicroseconds(50);
}
digitalWrite(EN_PIN, HIGH);
}
void CCW(int steps) {
digitalWrite(EN_PIN, LOW);
digitalWrite(DIR_PIN, LOW);
digitalWrite(LED_BUILTIN, LOW);
for (int i = 0; i < steps; i++) {
digitalWrite(STP_PIN, HIGH);
delayMicroseconds(50);
digitalWrite(STP_PIN, LOW);
delayMicroseconds(50);
}
digitalWrite(EN_PIN, HIGH);
}